これは私の前の質問の拡張です:継承による型安全性
古い質問を更新する代わりに、新しい質問を作成しました。これは、このトピックをさらに深く掘り下げているためです。
私の本来の目的は、実装クラスタイプのオブジェクトを返すメソッドを宣言することでした。そのような方法の1つGetSimpleClone()は、次のようになります。
IEntityメソッドを宣言するベースインターフェイスがGetSimpleClone()あり、たとえば、他のいくつかのインターフェイスによって実装されていますIPerson。
public interface IEntity<T> : where T : IEntity<T>
{
T GetSimpleClone();
}
public interface IPerson : IEntity<IPerson>
{
}
インターフェイスIAddressはも実装しIEntityます。ただし、別のインターフェイスIVenueはから継承しIAddressます。最初に説明したように、のGetSimpleClone()メソッドIAddressは型のオブジェクトを返しIAddress、同じメソッドはIVenue型のオブジェクトを返す必要がありますIVenue。したがって、の宣言は、ジェネリック型自体を宣言する必要があるため、とはIAddress異なります。IPerson
public interface IAddress<T> : IEntity<T> where T : IAddress<T>
{
}
public interface IVenue : IAddress<IVenue>
{
}
ここで問題となるのは、コンパイラIPersonへの参照がIAddressあり、当然のことながら、コンパイラがのジェネリック型を定義するように強制することですIAddress。
public interface IPerson : IEntity<IPerson>
{
IAddress<"Compiler: Define Type!!"> Address { get; set; }
}
私は本当にこの問題の解決策を見つけることができません、そしてそれが単に解決策がないと言っているだけであるとしても、あなたからの助けをいただければ幸いです。:)
前もって感謝します...