私は基本クラスのコンストラクタをオーバーライドするのが難しい半複合継承構造を持っています。継承したクラスに問題がある、ジェネリックのコンストラクタ
public abstract class MyBaseObject
{
public MyBaseObject(MyBaseCollection<MyBaseObject> parent)
{
this.Parent = parent;
}
public MyBaseCollection<MyBaseObject> Parent { get; set; }
}
public abstract class MyBaseCollection<T>
where T : MyBaseObject
{ }
public class MyRealObject : MyBaseObject
{
public MyRealObject(MyRealCollection parent)
: base(parent)
{ }
public new MyRealCollection Parent { get { return (MyRealCollection)base.Parent; } }
}
public class MyRealCollection : MyBaseCollection<MyRealObject>
{ }
だから、具体的には、私はMyBaseObjectクラスのコンストラクタをオーバーライドすることはできません。次のコードは、エラーを表示することができます。 MyBaseCollectionの代わりにMyRealCollectionを渡すことはできません。ジェネリックの議論を取り除くと、それは機能します。 MyRealCollectionはMyBaseCollectionの代わりに受け入れられます。しかし、コレクションクラスを必要な方法で動作させるためには、ジェネリックの議論が本当に必要です。
C#4を使用している場合この質問と回答を参照してください。問題への直接的な答えではないかもしれませんが、少しコードをリファクタリングすることになると助けになるかもしれません:http://stackoverflow.com/q/9203352/250725 – psubsee2003