インターフェースがあればMyInterface1
interface MyInterface1
{
ImyGod myproperty { get; set; }
}
クラスに次のことをさせると、不平を言う
class myClass : IMyInterface1
{
myGod myproperty { get; set; }
}
ここで myGod を使用して myClass を開始する必要がありますか? ありがとう。
それは不可能です。インターフェイスを実装するには、メンバーの署名がインターフェイスで定義されている署名とまったく同じである必要があります。プロパティの型が正確に一致するように、インターフェイスまたはクラスの実装を変更する必要があります。
プロパティにはセッターがあるため、インターフェイスに従って、そのプロパティに実装する任意のオブジェクトを設定できることを意味しますImyGod
が、代わりに派生クラスが型付けされてmyGod
いるため、 の他の実装をサポートできませんImyGod
。
あなたができることは、次のような汎用インターフェースを使用することです:
interface MyInterface1<T> where T : ImyGod
{
T myproperty { get; set; }
}
class myClass : IMyInterface1<myGod>
{
myGod myproperty { get; set; }
}
someOtherGod
これにより、コンパイルして意図したとおりに動作し、明らかにサポートできないプロパティに誰かがインスタンスを設定するのを防ぎます。
プロパティを public として宣言する必要があります。
class myClass : IMyInterface1
{
public ImyGod myproperty {get; set;}
}