在满足接口要求时,我的子类似乎不能伪装成基类.例如: class MyBaseClass{}class MySubClass : MyBaseClass{}interface MyInterface{ MyBaseClass someFunction();}class MyImplementation : MyInterface{ public MySubClass someFun
class MyBaseClass {} class MySubClass : MyBaseClass {} interface MyInterface { MyBaseClass someFunction(); } class MyImplementation : MyInterface { public MySubClass someFunction() { return null; } }
生成以下错误:
‘MyNamespace.MyImplementation’ does not implement interface member ‘MyNamespace.MyInterface.someFunction()’. ‘MyNamespace.MyImplementation.someFunction()’ cannot implement ‘MyNamespace.MyInterface.someFunction()’ because it does not have the matching return type of ‘MyNamespace.MyBaseClass’.
这也是需要接口与实现的问题.例如,如果我有一个带有返回IList的函数的接口,我的实现就不能返回一个List – 它必须返回一个IList.
我做错了什么或者这是C#接口的限制?
C#不支持协变返回类型.实现接口时,必须返回接口指定的类型.如果需要,可以显式实现接口,并使用另一个返回子类型的同名方法.例如:class MyImplementation : MyInterface { MyBaseClass MyInterface.someFunction() { return null; } public MySubClass someFunction() { return null; } }