0

オブジェクト BaseObject と DerivedObject があります。次に、BaseObject に BaseContainer を与え、DerivedObject に DerivedContainer を与えます。

(DerivedObject : BaseObject、DerivedContainer : BaseContainer)

たとえば、次のnewキーワードを使用します。

ベースオブジェクト:

public BaseContainer コンテナ {get; 設定;}

派生オブジェクト:

public new DerivedContainer Container
{ 
  get { return (DerivedContainer)base.Container; }
  set { base.Container = value;
        //Some extra things that MUST be called
      }
}

virtualoverride戻り値の型を変更できないため、機能しません(失敗get;)。 の余分なコード(コメント部分)を呼び出していないため、new私が行うと機能しません。((BaseObject)myDerivedObject).Container = somethingDerivedObject.Container__set

プロパティのみを作成しget、 を使用newし、仮想セッター メソッドを追加できることはわかっています (戻り値の型はいずれにせよ void であるため、オーバーライドできます) が、これを回避する方法があるかどうか疑問に思っていました。

4

1 に答える 1

1

ジェネリックを使用できます。

class Base<TContainer> where TContainer : Container
{
    TContainer Container { get; set; }
}

class Derived : Base<DerivedContainer> { }
于 2013-07-01T04:27:19.283 に答える