当满足接口需求时,我的子类似乎无法伪装成基类。例如:
class MyBaseClass
{}
class MySubClass : MyBaseClass
{}
interface MyInterface
{
MyBaseClass someFunction();
}
class MyImplementation : MyInterface
{
public MySubClass someFunction() { return null; }
}生成以下错误:
'MyNamespace.MyImplementation‘不实现接口成员'MyNamespace.MyInterface.someFunction()’。'MyNamespace.MyImplementation.someFunction()‘不能实现'MyNamespace.MyInterface.someFunction()’,因为它没有匹配的返回类型'MyNamespace.MyBaseClass‘。
这也是一个需要接口与实现的问题。例如,如果我有一个带有返回IList的函数的接口,那么我的实现就不能返回一个列表--它必须返回一个IList。
我是不是做错了什么,还是这是C#接口的限制?
发布于 2009-12-17 20:48:28
C#不支持协变量返回类型。在实现接口时,必须返回接口指定的类型。如果愿意,可以显式实现接口,并有另一个名称相同的方法返回子类型。例如:
class MyImplementation : MyInterface
{
MyBaseClass MyInterface.someFunction() { return null; }
public MySubClass someFunction() { return null; }
}发布于 2009-12-17 20:47:58
签名必须完全匹配,您必须这样做:
class MyImplementation : MyInterface
{
public MyBaseClass someFunction() { return null; }
}您可以实现泛型,但如下所示:
interface MyInterface<T>
{
T someFunction();
}
class MyImplementation : MyInterface<MySubClass>
{
public MySubClass someFunction() { return null; }
}注意:我可能遗漏了一些与语法相关的东西,比如MyInterface.someFunction
发布于 2009-12-17 20:48:50
如果接口需要MyBaseClass,则需要提供该类型。您可以在检索MySubClass实例时对其进行向下转换并将其转换回去。
https://stackoverflow.com/questions/1924441
复制相似问题