5
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”。

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

4

2 回答 2

11

您必须实现完全相同的接口。例如,这应该是有效的:

 IAlpha alpha = new Alpha();
 alpha.BetaProperty = new SomeOtherIBetaImplementation();

...但这不适用于您的代码,它总是期望它是 a Beta,不是吗?

您可以为此使用泛型:

interface IAlpha<TBeta> where TBeta : IBeta
{
    TBeta BetaProperty { get; set; }
}

...

public class Alpha : IAlpha<Beta>

当然,这可能有点矫枉过正——你最好只使用 in 类型的属性IBetaAlpha完全按照接口。这取决于上下文。

于 2012-12-25T08:13:42.257 回答
2

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

因此,如果您正在实现该接口,则必须实现确切的接口,以便所有其他用户都能得到他们所期望的。

于 2012-12-25T08:11:40.133 回答