C#"Couldnotfindasuitablemethodtooverride."-但是有一个我无法在该类的C#方法中覆盖父级。父类的设置如下:publicclassBase{publicBase(Game1game){this.game=game;我知道我过去已经成功地覆盖了一个父方法,现在我可能忽略了一些非常简单的事情……它是什么?编辑:这实际上是一个错字:在实际的脚本中,Ext确实来自Base。问题仍然存在。但感谢您的快速回答。?您提供的代码(编辑后)编译正常,因此其他错误不是您发布的。要检查的东西,一切都是公开的吗?这包括类和方法。使用不同的参数重载?您确定Base是您认为的类吗?即它是否有另一个与它实际引用的名称相同的类?编辑:要回答评论中的问题,您不能覆盖具有不同参数的方法,也不需要。您可以创建一个不带override关键字(使用新参数)的新方法,它会正常工作。如果您打算禁止调用不带参数的基方法,您可以将方法标记为受保护的而不是公共的。这样它只能从inheritanceBase类调用你不是从你的基类继承:publicclassExt:Base{//constructorpublicoverridevoidDraw(){}}你的方法的签名是不同的。但是要覆盖方法,签名必须相同。在您的情况下,基类版本没有参数,派生版本有一个。所以你想做的事情没有多大意义。目的是如果有人在具有静态类型Base但具有运行时类型Ext的变量上调用基函数,则该调用将运行Ext版本。对于不同的参数计数,这显然是不可能的。也许您根本不想覆盖?Ext需要inheritancebase,因此在您的定义中它应该说:publicclassExt:Base{//...我遇到这个问题只是为了发现我的一个库对象已断开连接。由于某种原因,该项目正在从旧路径复制dll,而不是从我的开发路径复制更改。编译时要密切注意复制的dll。你忘了派生自BasepublicclassExt:Base^^^^^^我没看到Ext类派生自Base。您需要从基类继承。确保让子类显式继承父类:publicclassExt:Base{//stuff}您不能覆盖具有不同参数的函数,您只能更改被覆盖方法的功能。//编译器Microsoft(R).NETFramework4.5使用系统;使用System.Collections.Generic;使用System.Linq;使用System.Text.RegularExpressions;//覆盖和重载命名空间多态性{publicclassProgram{publicstaticvoidMain(string[]args){drowButncalobj=newdrowButn();BtnOverridecalobjOvrid=newBtnOverride();Console.WriteLine(calobj.btn(5.2,6.6).ToString());//btn已经完全覆盖了这个calobjOvrid对象Console.WriteLine(calobjOvrid.btn(5.2,6.6).ToString());//重载函数Console.WriteLine(calobjOvrid.btn(newdouble[]{5.2,6.6}).ToString());控制台.ReadKey();}}publicclassdrowButn{//相同的add函数重载以添加double类型字段输入publicvirtualdoublebtn(doublenum1,doublenum2){return(num1+num2);}}publicclassBtnOverride:drowButn{//相同的添加函数被覆盖并改变其功能//(这将完全取代基类fufunctionpublicoverridedoublebtn(doublenum1,doublenum2){//做完全不同的函数然后基类return(num1*num2);}//相同的函数重载(没有使用覆盖关键字)//这不会影响基类函数publicdoublebtn(double[]num){doublecal=0;foreach(num中的双elmnt){cal+=elmnt;}返回校准;我遇到了类似的情况,然后代码在工作,而不是在文件中拖放代码时转动,而是将一个对象移动到另一组括号中。我花了很长时间才弄清楚比我承认的更多。一旦我将代码移回原位,错误就解决了。可能你的基类是同名的基类。右键单击扩展类以检查并转到定义。检查类是否正确。以上是C#学习教程:C#《找不到合适的方法来覆盖》。-不过有完整的内容分享,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注-本文收集自网络,不代表正文位置。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
