刚刚才回答了一次,现在又遇到一个。
.net处理这种问题有两种机制:1,子类使用new关键字屏蔽父类的方法,则调用谁的方法由“定义时的类型决定”;2,子类使用override关键字重写父类方法,则调用谁的方法由”运行时引用真实的对象决定“。
如果你用让它调用A的方法,很简单,让它引用A的对象。例如:
B pro=new A();
pro.show();
这样修改就可以了
class B:A
{
public new void show()
{
Console.WriteLine("B");
}
}
只有使用new才可以让各自的对象引用自己的方法.
override的话,子类的方法已经覆写了父类的方法,只有实例化父类自身,否则无法通过子类调用到父类的方法.
因为方法已经被子类重写,所以子类的引用不能调用父类的方法。
所以两个输出都是B
似乎是没有办法。在子类内部是可以的,可以用base指针,在外部,貌似没有办法。
A pro = new A();
pro.show();
pro = new B();
pro.show();
可以用A的引用调用B中的show(),反过来好像不行