C#接口和类型伪装

C#接口和类型伪装,第1张

概述在满足接口要求时,我的子类似乎不能伪装成基类.例如: class MyBaseClass{}class MySubClass : MyBaseClass{}interface MyInterface{ MyBaseClass someFunction();}class MyImplementation : MyInterface{ public MySubCl 在满足接口要求时,我的子类似乎不能伪装成基类.例如:

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; }}
总结

以上是内存溢出为你收集整理的C#接口和类型伪装全部内容,希望文章能够帮你解决C#接口和类型伪装所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1215730.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存