将您的财产视为两种方法(因为它就是这样):
public interface IGroupInfo
{
IPictureInfo GetPicture();
void SetPicture( IPictureInfo value );
}
所以这个接口告诉我们任何实现它的人都会有两个方法,一个返回一个IPictureInfo,一个接受一个IPictureInfo。那么,当您尝试以这种方式实现它时,您的情况会发生什么:
public class GroupInfo : IGroupInfo
{
public PictureInfo GetPicture();
public void SetPicture( PictureInfo value );
}
这里的问题是您实际上并没有正确实现接口,因为您的GroupInfo
类将只接受IPictureInfo
(特别是PictureInfo
)的特定实现,而不是能够接受IPictureInfo
(接口说它应该能够)的任何实现。
我不知道有任何简单的方法可以用一个属性来解决这个问题。你可以把它分成两个单独的方法,因为你可以像这样在类型上指定协方差/逆变:
public interface IGroupInfo<out TGet, in TSet>
where TGet : IPictureInfo
where TSet : IPictureInfo
{
TGet GetPicture();
void SetPicture( TSet value );
}
这有几个缺点。首先,您没有一个统一的具体接口,这可能不是您想要的。
我不知道 C# 是否允许接口的协变实现,因为我几乎从不需要它(我认为不需要,但我不确定)。例如,即使您的界面是这样的:
public interface IGroupInfo
{
IPictureInfo Picture { get; }
}
我不确定这会编译:
public class GroupInfo : IGroupInfo
{
public PictureInfo Picture { get; }
}
尽管这似乎是一件合理的事情。
编辑:刚刚检查过,最后一个示例无法编译,返回类型必须匹配。