c#接口属性实现

本文关键字:实现 属性 接口 | 更新日期: 2023-09-27 17:49:33

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 . alpha。因为它没有匹配的返回类型'InterfaceTest.IBeta'。

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

c#接口属性实现

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

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

…但这对你的代码不起作用,因为总是期望它是一个Beta,不是吗?

你可以使用泛型:

interface IAlpha<TBeta> where TBeta : IBeta
{
    TBeta BetaProperty { get; set; }
}
...
public class Alpha : IAlpha<Beta>

当然,这可能是多余的-您可能更好地在Alpha中使用类型为IBeta的属性,完全按照接口。这取决于上下文

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

所以,如果你要实现那个接口,你必须实现精确的接口,这样所有其他用户都能得到他们所期望的。