如何使用基类对象调用派生函数
class Parent { public int GetNo() { return 1; } } class Child : Parent { public Child() { } public int GetNo() { return 2; } } Parent p = new Child(); p.GetNo();
但它调用Base.GetNo()
。 我知道如果我在base中使用Child.GetNo()
它会调用Child.GetNo()
但是我不能在Base中使用Child.GetNo()
因为我必须从已经在DLL中分发的base派生我的类。所以我无法修改现有的基类的function。
任何建议都是有价值的。 谢谢
你可以施展它:
((Child)p).GetNo();
要么
if(p is Child) (p as Child).GetNo();
您可以使用显式强制转换来强制执行此操作
((Child)p).GetNo();
或者你可以使用隐藏例如
public new int GetNo() { return 2; }
虽然我认为如果将变量输入到隐藏方法的类中,后者才会被调用。
如果你真的需要正确地覆盖一个方法并且它来自一个已编译的DLL,请考虑与开发人员联系,看看他们是否可以使该方法成为虚拟(如果不是为什么),或者如果一个开源项目只是获取源代码并修改它自己。
如果没有在方法上声明virtual
,则始终会调用基本方法,因为您将变量声明为Parent
。 如果你不能将virtual
附加到基类,那么你只能将变量声明为Child
,或者将其GetNo
为Child
并调用你的GetNo
方法:
Child p = new Child(); p.GetNo();
要么:
Parent p = new Child(); ((Child)p).GetNo();
我刚刚来到这里,所以我可以找到一个不使用演员阵容的解决方案,但因为我没有找到它在这里是一个。
也许它对某人有帮助。
abstract class Parent { public int GetNo() { return GetNoImpl(); } protected abstract int GetNoImpl(); } class Child : Parent { public Child() { } protected override int GetNoImpl(); { return 2; } } Parent p = new Child(); p.GetNo();
注意:父类是抽象的。
上述就是C#学习教程:如何使用基类对象调用派生函数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/985270.html