プロパティを 2 つのメソッドと考えてください (それがそのためです)。
public interface IGroupInfo
{
IPictureInfo GetPicture();
void SetPicture( IPictureInfo value );
}
したがって、このインターフェイスは、それを実装する人は誰でも、IPictureInfo を返すメソッドと IPictureInfo を受け入れるメソッドの 2 つのメソッドを持つことを示しています。したがって、この方法で実装しようとすると、あなたの場合はどうなりますか:
public class GroupInfo : IGroupInfo
{
public PictureInfo GetPicture();
public void SetPicture( PictureInfo value );
}
ここでの問題は、実際にはインターフェイスを正しく実装していないことです。これは、GroupInfo
クラスがIPictureInfo
(具体的PictureInfo
には) の実装を受け入れるのではなく、特定の実装のみを受け入れるためですIPictureInfo
(インターフェイスができるはずだと言っている)。
単一のプロパティでこれを回避する簡単な方法を知りません。次のように型に対して共分散/反分散を指定できるため、2 つの別々の方法に分割できます。
public interface IGroupInfo<out TGet, in TSet>
where TGet : IPictureInfo
where TSet : IPictureInfo
{
TGet GetPicture();
void SetPicture( TSet value );
}
これにはいくつかの欠点があります。まず、統一された具体的なインターフェイスが 1 つもありません。これは、必要なものではない可能性があります。
C# がインターフェイスの共変実装を許可するかどうかは、頭の中でわかりません。必要になることはほとんどないためです (必要だとは思いませんが、よくわかりません)。たとえば、インターフェースがこれだったとしても:
public interface IGroupInfo
{
IPictureInfo Picture { get; }
}
これがコンパイルされるかどうかはわかりません:
public class GroupInfo : IGroupInfo
{
public PictureInfo Picture { get; }
}
それは合理的なことのように思えますが。
編集:チェックしたところ、最後の例はコンパイルされません。戻り値の型が一致する必要があります。