给定以下代码,有没有办法我可以调用方法X的A类版本?class A{ virtual void X() { Console.WriteLine("x"); }}class B : A{ override void X() { Console.WriteLine("y"); }}class Program{ static void Main() { A b = new B(); // Call A.X somehow, not B.X... }
3 回答
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
使用C#语言构造,您不能从或范围之外显式调用基函数。如果您确实需要这样做,那么您的设计中就有一个缺陷-即该功能不应该从一开始就是虚拟的,或者应该将基本功能的一部分提取为单独的非虚拟功能。AB
您可以从BX 内部调用AX
class B : A
{
override void X() {
base.X();
Console.WriteLine("y");
}
}
但是那是另外一回事。
正如Sasha Truf在此答案中指出的那样,您可以通过IL来完成。正如您在评论中指出的那样,您可能还可以通过反思来实现。
慕丝7291255
TA贡献1859条经验 获得超6个赞
我知道这是历史问题。但是对于其他Google员工:您可以编写这样的内容。但这需要对基类进行更改,这使得它对外部库无用。
class A
{
void protoX() { Console.WriteLine("x"); }
virtual void X() { protoX(); }
}
class B : A
{
override void X() { Console.WriteLine("y"); }
}
class Program
{
static void Main()
{
A b = new B();
// Call A.X somehow, not B.X...
b.protoX();
}
- 3 回答
- 0 关注
- 370 浏览
添加回答
举报
0/150
提交
取消