给定
public class Animal
{
public Animal()
{
Console.WriteLine("Animal constructor called");
}
public virtual void Speak()
{
Console.WriteLine("animal speaks");
}
}
public class Dog: Animal
{
public Dog()
{
Console.WriteLine("Dog constructor called");
this.Speak();
}
public override void Speak()
{
Console.WriteLine("dog speaks");
base.Speak();
}
}
this.Speak()
来电Dog.Speak()
。从狗身上移开Speak()
,突然this.Speak()
叫起来Animal.Speak()
。为什么this
会有这种行为?换句话说,为什么this
是base
或this
?
对我来说,明确调用base.Speak()
更有意义。特别是当 speak 不是虚拟的时,令人惊讶的是 Speak() 在virtual
被移除时仍然被调用。我从 OO 意义上理解 IS-A 关系,但我无法解决 C# 中的这个特定问题。当人们编写上帝级的 UI(几乎每个企业都这样做)时,这会变得特别烦人。当我应该查看“base”时,我正在“this”中寻找“Speak()”。