VirtualMethods例如,如果我有一个名为“Parent”的类。他有一个名为“Print”的方法“Print”。派生类“Kid”有一个名为“Print”的方法,但是是一个新方法。新的公共无效打印;让我们创建一个对象:Parentp=newKid();如果我将方法Print与指向此对象的指针一起使用,则该方法将是父级(“父级”)的方法,而不是“Kid”。但是当我使用虚拟方法时,该方法将是Kid的而不是父方法。(如果Print是虚拟的,则在“Kid”中打印会覆盖该方法)为什么?您没有覆盖继承类中的方法-您正在隐藏它。相反:publicnewvoidPrint();使用:publicoverridevoidPrint();当你对一个方法使用new关键字时,它与父方法中的方法具有相同的签名,它会隐藏父方法。隐藏不等于覆盖。隐藏是指如果实例和变量都是子类型,那么将调用新方法。而覆盖确保无论变量是子类型还是超类,都会调用覆盖的方法。编辑:看看MSDN上的比较表。我不太确定是什么你在问,但这篇文章很好,很好地介绍了C#中的多态性。虚拟方法调用使用对象的实际类型来确定要调用的方法,而非虚拟方法使用引用的类型。假设你有:publicclassParent{publicvoidNonVirtualPrint(){}publicvirtualvoidVirtualPrint(){}}publicclassKid:Parent{publicnewvoidNonVirtualPrint(){}overridepublicvoidVirtualPrint(){}}然后:以上就是C#学习教程:虚方法分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——Parentp=newParent();父母x=新孩子();孩子k=新孩子();p.NonVirtualPrint();//调用父类中的方法p.VirtualPrint();//调用父类中的方法x.NonVirtualPrint();//调用父类中的方法x.VirtualPrint();//调用Kid中的方法k.NonVirtualPrint();//调用Kid中的方法k.VirtualPrint();//调用KidContact管理员中的方法删除。如需转载请注明出处:
