C#接口属性实现

kar*_*una 5 c# inheritance interface

interface IAlpha
{
    IBeta BetaProperty { get; set; }
}

interface IBeta
{

}

class Alpha : IAlpha
{
    public Beta BetaProperty { get; set; } // error here
}

class Beta : IBeta
{

}
Run Code Online (Sandbox Code Playgroud)

'InterfaceTest.Alpha'没有实现接口成员'InterfaceTest.IAlpha.BetaProperty'.'InterfaceTest.Alpha.BetaProperty'无法实现'InterfaceTest.IAlpha.BetaProperty',因为它没有匹配的返回类型'InterfaceTest.IBeta'.

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

Jon*_*eet 10

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

 IAlpha alpha = new Alpha();
 alpha.BetaProperty = new SomeOtherIBetaImplementation();
Run Code Online (Sandbox Code Playgroud)

...但是这对你的代码来说是不行的,它总是期望它是一个Beta,是吗?

你可以使用泛型:

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

...

public class Alpha : IAlpha<Beta>
Run Code Online (Sandbox Code Playgroud)

当然,这可能是矫枉过正-你可能会更好只使用类型的属性IBetaAlpha,正是因为每个接口.这取决于具体情况.