C#接口属性实现

时间:2012-12-25 08:08:31

标签: c# inheritance interface

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'。

我的问题是为什么属性实现仅限于同一类型。为什么我不能使用派生类型?

2 个答案:

答案 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)

接口声明了该类将拥有的一组方法,因此使用该接口的任何人都知道会发生什么。

因此,如果您要实现该接口,则必须实现完全接口,以便所有其他用户获得他们期望的内容。