interface IAlpha
{
IBeta BetaProperty { get; set; }
}
interface IBeta
{
}
class Alpha : IAlpha
{
public Beta BetaProperty { get; set; } // error here
}
class Beta : IBeta
{
}
'InterfaceTest.Alpha'没有实现接口成员'InterfaceTest.IAlpha.BetaProperty'。 'InterfaceTest.Alpha.BetaProperty'无法实现'InterfaceTest.IAlpha.BetaProperty',因为它没有匹配的返回类型'InterfaceTest.IBeta'。
我的问题是为什么属性实现仅限于同一类型。为什么我不能使用派生类型?
答案 0 :(得分:10)
您必须实现完全相同的界面。例如,此应该有效:
IAlpha alpha = new Alpha();
alpha.BetaProperty = new SomeOtherIBetaImplementation();
...但这不适用于总是期望它是Beta
的代码,是吗?
您可以使用泛型:
interface IAlpha<TBeta> where TBeta : IBeta
{
TBeta BetaProperty { get; set; }
}
...
public class Alpha : IAlpha<Beta>
当然,这可能有点过分 - 你最好只在IBeta
中使用Alpha
类型的属性,完全按照界面。这取决于具体情况。
答案 1 :(得分:2)
接口声明了该类将拥有的一组方法,因此使用该接口的任何人都知道会发生什么。
因此,如果您要实现该接口,则必须实现完全接口,以便所有其他用户获得他们期望的内容。