以下のコード スニペットを検討してください。
class BaseClass
{
public void SayHi()
{
Console.WriteLine("Hi from base class");
}
public virtual void SayHello()
{
Console.WriteLine("Hello from base class");
}
}
class DerivedClass : BaseClass
{
public void SayHi()
{
Console.WriteLine("Hi from derived class");
}
public new void SayHello()
{
Console.WriteLine("Hello from derived class");
}
}
class Program
{
static void Main(string[] args)
{
BaseClass _object = new DerivedClass();
_object.SayHi();
_object.SayHello();
Console.ReadKey();
}
}
上記の出力は次のとおりです。
Hi from base class
Hi from derived class
どなたかこの理由を教えてください。また、派生クラスで同名のメソッドを作成する場合、基底クラスの仮想メソッドをオーバーライドする必要はないのでしょうか?