虚拟方法
例如,如果我有一个名为"Parent"
的类。 他有一个名为"Print".
的方法"Print".
派生类"Kid"
,它有一个名为"Print"
的方法,但是一个新方法。
new public void Print;
让我们创建一个对象:
Parent p = new Kid();
如果我将使用方法Print使用此对象的指针,方法将是父亲的(“父”)方法,而不是“孩子”。
但是当我使用虚拟方法时,该方法将是Kid’s而不是父方法。(如果Print是虚拟的,则“Kid”中的print会覆盖方法“)
为什么?
您没有覆盖inheritance类中的方法 – 您正在隐藏它。
代替:
public new void Print();
使用:
public override void Print();
当您将new关键字与具有与父方法中的方法相同的签名的方法一起使用时,它会隐藏父方法。 阴影与重写不同。 阴影意味着如果实例和变量都是子类型,则将调用新方法。 而重写确保无论变量属于子类型还是父类,都将调用overriden方法。
编辑:
看一下MSDN上的比较表 。
我不太确定你在问什么,但这篇文章很好地介绍了C#中的多态性。
虚方法调用使用对象的实际类型来确定要调用的方法,而非虚方法使用引用的类型。
说你有:
public class Parent { public void NonVirtualPrint() {} public virtual void VirtualPrint() {} } public class Kid : Parent { public new void NonVirtualPrint() {} override public void VirtualPrint() {} }
然后:
上述就是C#学习教程:虚拟方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
Parent p = new Parent(); Parent x = new Kid(); Kid k = new Kid(); p.NonVirtualPrint(); // calls the method in Parent p.VirtualPrint(); // calls the method in Parent x.NonVirtualPrint(); // calls the method in Parent x.VirtualPrint(); // calls the method in Kid k.NonVirtualPrint(); // calls the method in Kid k.VirtualPrint(); // calls the method in Kid
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1031057.html