1. ホーム
  2. c#

[解決済み】新規作成とオーバーライドの違いについて

2022-04-01 13:58:10

質問

以下の違いは何でしょうか?

ケース1:ベースクラス

public void DoIt();

ケース 1: 継承されたクラス

public new void DoIt();

ケース2:ベースクラス

public virtual void DoIt();

ケース 2: 継承されたクラス

public override void DoIt();

私が行ったテストによると、ケース1もケース2も同じ効果があるように見えます。違いや、望ましい方法はありますか?

解決方法は?

<ブロッククオート

override修飾子は 仮想メソッドに使用され 抽象的なメソッド。これは コンパイラは最後に定義された を実装しています。たとえ への参照で呼び出された場合、そのメソッドは ベースクラスが使用されます。 をオーバーライドした実装を使用します。

public class Base
{
    public virtual void DoIt()
    {
    }
}

public class Derived : Base
{
    public override void DoIt()
    {
    }
}

Base b = new Derived();
b.DoIt();                      // Calls Derived.DoIt

を呼び出します。 Derived.DoIt をオーバーライドする場合は Base.DoIt .

新しいモディファイアは コンパイラは、子クラスの実装を使用するように の代わりに親クラスの の実装があります。でないコードは 自分のクラスではなく、親クラスを参照する クラスは親クラスを使用します。 の実装を使用します。

public class Base
{
    public virtual void DoIt()
    {
    }
}

public class Derived : Base
{
    public new void DoIt()
    {
    }
}

Base b = new Derived();
Derived d = new Derived();

b.DoIt();                      // Calls Base.DoIt
d.DoIt();                      // Calls Derived.DoIt

最初に呼び出すのは Base.DoIt 次に Derived.DoIt . これらは、派生メソッドがベースメソッドをオーバーライドするのではなく、事実上、同じ名前を持つ2つの全く別のメソッドです。

出典 マイクロソフトブログ