给定
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()”。