与えられた
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
このように振る舞うのですか?言い換えれば、なぜorthis
を意味するのでしょうか? base
this
私にとっては、明示的な呼び出しのbase.Speak()
方が理にかなっています。特に speak が virtual でない場合、驚くべきことに Speak()virtual
は削除されても呼び出されます。オブジェクト指向の感覚から IS-A 関係を理解していますが、C# でこの特定の問題に頭を悩ませることはできません。これは、人々が神クラスの UI を作成する場合に特に厄介になります (実際にはすべての企業が行っています)。「base」を見なければならないときに、「this」内の「Speak()」を探しています。