派生クラスの仮想メソッドの新しい実装を提供するためにnewを使用する実際のシナリオは何ですか? C#仮想メソッドの実装を隠すための新しいキーワードの実際の使用状況? c#
私はそれが技術的に何を意味するのか知っています。私が探しているのは、これが必要となる現実のシナリオです。
オーバーライド機能を提供することで、常に同じことを達成できます。メソッドの呼び出しを基底にキャストしたときに、不正なメソッドが選択されたのはなぜでしょうか。
派生クラスの仮想メソッドの新しい実装を提供するためにnewを使用する実際のシナリオは何ですか? C#仮想メソッドの実装を隠すための新しいキーワードの実際の使用状況? c#
私はそれが技術的に何を意味するのか知っています。私が探しているのは、これが必要となる現実のシナリオです。
オーバーライド機能を提供することで、常に同じことを達成できます。メソッドの呼び出しを基底にキャストしたときに、不正なメソッドが選択されたのはなぜでしょうか。
いいえ同じ結果は得られません。今
// Define the base class
class Car
{
public virtual void DescribeCar()
{
System.Console.WriteLine("Four wheels and an engine.");
}
}
// Define the derived classes
class ConvertibleCar : Car
{
public new virtual void DescribeCar()
{
base.DescribeCar();
System.Console.WriteLine("A roof that opens up.");
}
}
class Minivan : Car
{
public override void DescribeCar()
{
base.DescribeCar();
System.Console.WriteLine("Carries seven people.");
}
}
、あなたがこれを行うにしようとした場合:
public static void TestCars2()
{
Car[] cars = new Car[3];
cars[0] = new Car();
cars[1] = new ConvertibleCar();
cars[2] = new Minivan();
}
結果は以下のようになります。新しいONLYそれはときに宣言された型として使用されない間
Car object: YourApplication.Car
Four wheels and an engine.
----------
Car object: YourApplication.ConvertibleCar
Four wheels and an engine.
----------
Car object: YourApplication.Minivan
Four wheels and an engine.
Carries seven people.
----------
オーバーライドは常に上書き(ベースではない)。
あなたはsee more here
で議論scenerio..andこの1つが本のため..ですジョンによって与えられたanyway..brittleベースsecenerioはそれに答えます – ParvindS
することができません、あなたはをオーバーライドすることで同じことを達成することはできません。
1つ前十分なシナリオ:
、すべてのあなたのがまだコールBar.DoSomethingにBar.DoSomethingを呼び出す、既存のコードをしたいが、Foo.DoSomethingを呼び出すすべてのコードはまだその実装を呼び出す必要があります - しないことがあり、それらの発信者をあなたの方法についてはでもを知っていて、サードパーティのアセンブリに含まれている可能性があります。
長期的に見ると、できるだけ多くのコントロールを呼び出し側に持っていても、メソッドの名前を変更したいのですが、短期間にメソッドをnew
として実行すると、欲しいです。
この種のことは時々脆いベースクラス問題として知られています。 Eric Lippertは、this post back in 2004を含めてそれについてかなり広範囲に書いています。
仮想メソッドを再定義することができます。 virtualキーワードは、派生クラスでオーバーライドされるメソッドを指定します。残りのプログラムを変更することなく派生型を追加できます。したがって、ランタイム・タイプのオブジェクトは動作を決定します。より良い
http://programmers.stackexchange.com/私は現実の生活のために探していた –