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”。
我的问题是,为什么属性实现被限制为同一类型。为什么不能使用派生类型?

最佳答案

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

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

…但这对你的代码来说是行不通的,因为你总是希望它是一个Beta,不是吗?
不过,您可以使用泛型:
interface IAlpha<TBeta> where TBeta : IBeta
{
    TBeta BetaProperty { get; set; }
}

...

public class Alpha : IAlpha<Beta>

当然,这可能有点过头了—您最好使用IBetaAlpha类型的属性,完全按照接口。这取决于上下文。

07-24 16:52