4

このシナリオが C# の継承で可能かどうかを知りたいです。

3つのクラスがあるとしましょう。

public class Base
{   
    public abstract void SomeMethod(Base param);
}

public class ChildA : Base
{   
    public override void SomeMethod(ChildA param);
}

public class ChildB : Base
{   
    public override void SomeMethod(ChildB param);
}

子クラスのメソッドで毎回基本パラメーターを型キャストしたくありません。それで、これは可能ですか?

4

2 に答える 2

7

その機能は、仮パラメーター型の共分散と呼ばれます。c# ではサポートされていません。また、タイプセーフではありません。

その 2 つのバリエーションはタイプセーフです。仮パラメーターの反変性と戻り型の共変性。C# は、ジェネリック デリゲート変換とメソッド グループからデリゲートへの変換をサポートしていますが、仮想メソッドのオーバーライドではサポートしていません。

あなたはここで運が悪いと思います。

于 2013-06-06T00:12:20.950 に答える
3

いいえ。パラメータは完全に一致している必要があります。

virtual/override の全体的な目的は、通常、Base クラス参照からメソッドを呼び出すことです。

 Base b = ....;
 b.SomeMethod(x);  // might actually call ChildA.SomeMethod() or ChildB.SomeMethod()
于 2013-06-05T23:47:12.307 に答える