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)
当然,这可能是矫枉过正-你可能会更好只使用类型的属性IBeta中Alpha,正是因为每个接口.这取决于具体情况.