Csharp/C#教程:如何使用基类对象调用派生函数分享


如何使用基类对象调用派生函数

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 ,或者将其GetNoChild并调用你的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

(0)
上一篇 2021年12月21日
下一篇 2021年12月21日

精彩推荐