【发布时间】:2017-06-29 20:52:09
【问题描述】:
我有一个 B 类,它是 A 类的子类。我创建了一个 B 类型的对象并在其上调用 OnlyA(),但在 OnlyA() 内部,对 OnlyB() 的调用会导致编译器错误。
据我了解,OnlyB() 与this.OnlyB() 相同,调用的方法应从对象的类 (B) 中选择,而不是从正在执行代码的当前类 (A) 中选择。这就是为什么对 Both() 的调用调用 B 中的方法,而不是 A。那么为什么它在 A 中而不是 B 中搜索 OnlyB()?我应该如何知道调用的方法是从对象的类还是当前类中选择的?
class Program
{
static void Main(string[] args)
{
B bRefB = new B();
bRefB.OnlyA();
}
}
class A
{
public void OnlyA()
{
Console.WriteLine("In A - OnlyA()");
OnlyB(); // compiler error
Both(); // calls the method in B
}
public virtual void Both()
{
Console.WriteLine("In A - Both()");
}
}
class B : A
{
public void OnlyB()
{
Console.WriteLine("In B - OnlyB()");
}
public override void Both()
{
Console.WriteLine("In B - Both()");
}
}
【问题讨论】:
-
想象一下,如果您没有收到编译器错误。静态类型有什么好处?您可以从 A 调用任何内容,并且在运行时之前不会出现错误。
标签: c# inheritance