何らかの理由で、次のようにジェネリック基本クラスを使用して、ジェネリック インターフェイスからプロパティを実装しようと戦っています。
public interface IParent<TChild> where TChild : IChild
{
TChild Child { get; }
}
public interface IChild { }
次に、基本クラスがあります。
public class ParentBase<TChild> : IParent<TChild> where TChild : IChild
{
private TChild _child;
public ParentBase(TChild child)
{
this._child = child;
}
#region IParent<TChild> Members
public TChild Child
{
get { return _child; }
}
#endregion
}
これで、次のような新しい親派生オブジェクトと子オブジェクトができました。
public class MyChild : IChild { }
public class MyParent : ParentBase<MyChild>, IParent<IChild>
{
public MyParent(MyChild child)
: base(child)
{
}
}
私はそれをインスタンス化し、次のように消費者に渡す抽象 (インターフェイス タイプ) を取得したいと考えています。
IParent<IChild> parent = new MyParent(new MyChild());
しかし、ParentBase でプロパティを定義したにもかかわらず、何らかの理由で TChild を正しく実装できませんpublic TChild Child
。明示的に実装しようとしても、コンパイラは実装されていないと言います。ご覧のとおり、制約は基本クラスにまで及びます。