これは私の前の質問の拡張です:継承による型安全性
古い質問を更新する代わりに、新しい質問を作成しました。これは、このトピックをさらに深く掘り下げているためです。
私の本来の目的は、実装クラスタイプのオブジェクトを返すメソッドを宣言することでした。そのような方法の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; }
}
私は本当にこの問題の解決策を見つけることができません、そしてそれが単に解決策がないと言っているだけであるとしても、あなたからの助けをいただければ幸いです。:)
前もって感謝します...