0

以下のコード スニペットを検討してください。

  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

どなたかこの理由を教えてください。また、派生クラスで同名のメソッドを作成する場合、基底クラスの仮想メソッドをオーバーライドする必要はないのでしょうか?

4

1 に答える 1

0

ポリモーフィズムの全体的なポイントは、タイプのオブジェクトをクラスBaseClassのインスタンスに設定できるが、Derived異なる動作 [セマンティクス] を持つことができるということです。そうでない場合、新しい派生 Form インスタンスをフレームワークに挿入することはできませんWinforms

OP、あなたの定義は間違っています。仮想メソッドは、ポリモーフィズムを有効にするためのものです。キーワードの使用newも間違っています。メソッドoverrideの新しい動作を定義する必要があります。virtual

基本クラスの仮想メソッドは基本クラスでオーバーライドできるため、変数の型がBaseClassであっても、オーバーライドされた仮想メソッドがその変数で呼び出されます。

于 2013-01-20T15:39:24.743 に答える