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