この場合、オーバーライドする必要はありません。派生オブジェクト参照は、いつでも基本クラス変数に直接割り当てることができます。
objBase myObjB = new objDerived();
インスタンスを作成してすぐに再割り当てすることもお勧めできません。
// Don't instantiate an object in the first line here,
// since you're going to assign it in the next line
objBase myObjB; //= new objBase();
myObjB = new objDervied();
はどうかと言うと:
したがって、このobjDerivedタイプに、objBaseメソッドで新しい修飾子を使用するメソッドがあるが、キャストされたobjBaseオブジェクトで新しいメソッドを使用したいとします。
new
派生クラスに割り当てたりキャストバックしたりすることによってのみ、基本クラスのメソッドを非表示にするメソッドを呼び出すことができます。
objBase myObjB = new objDerived();
((objDerived)myObjB).Method(); // Will call objDerived.Method
myObjB
実際にインスタンスを参照していない場合、これは実行時に失敗しobjDerived
ます。
ここでの他のオプションは、を使用することdynamic
です。変数にを使用dynamic
すると、動的ディスパッチが発生します。これにより、変数は常に「最も派生した」型であるかのように効果的に動作し、新しいメソッドを呼び出します。これは、通常は静的に型指定されている場合でも、C#で複数のディスパッチを効果的に実行できるという点で実際に役立ちます。完全な動作サンプルは次のとおりです。
void Main()
{
Base b = new Derived();
dynamic d = b;
Console.WriteLine(d.Output());//This prints "Derived"
}
public class Base {
public string Output() {
return "Base";
}
}
public class Derived: Base {
public new string Output() {
return "Derived";
}
}