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>
当然,这可能有点过头了—您最好使用
IBeta
中Alpha
类型的属性,完全按照接口。这取决于上下文。