C#-Can';使用覆盖方法时,无法通过
我有一个与下面的示例非常相似的方法,它不允许我将C#-Can';使用覆盖方法时,无法通过,c#,overriding,out,C#,Overriding,Out,我有一个与下面的示例非常相似的方法,它不允许我将out导出outItem public override bool myMethod(string item, out string outItem) { outItem = ""; return true; } 它不断给出以下错误: “未找到要重写的合适方法” 如果我删除覆盖,错误就会消失。如何解决此问题?基类中的方法似乎没有将该参数标记为out。您需要符合基类的签名。如果可以将基类更改为
out
导出outItem
public override bool myMethod(string item, out string outItem)
{
outItem = "";
return true;
}
它不断给出以下错误:
“未找到要重写的合适方法”
如果我删除
覆盖
,错误就会消失。如何解决此问题?基类中的方法似乎没有将该参数标记为out
。您需要符合基类的签名。如果可以将基类更改为将方法标记为out
,那么也可以在派生类型上将其标记为这样。如果不能,则无法重写该方法,您必须创建一个新方法。听起来myMethod的基类签名没有对第二个参数使用out
。您不能仅仅添加它,因为它会更改方法签名。如果您拥有基类的控制权,则可以添加它,但如果没有,则需要删除重写。“我有一个与..非常相似的方法”
,要进行重写,方法签名必须是精确匹配的,而不是相似的。包含此方法的类的超类是否也有此精确方法(名称和签名必须匹配)?如果不是,则不是覆盖。是否删除覆盖?它覆盖了什么?@Servy,我不确定这是否是签名的一部分,我相信签名只是特定于类型
,而不是参数名。@Habib这在C#4.0添加命名参数时是不正确的。请注意,如果只是删除覆盖,此方法将不同于基类中的方法,这意味着如果您有类似于MyBase b=new MyConcrete();bool result=b.myMethod(“hello”,out-item)代码>它将不会编译,因为新方法未在基类中定义。@EricJ。是的,我知道。但是如果他不能改变基类,他的选择是非常有限的,他将无法做他想做的事情。注意对他来说更重要的是,确保他意识到这是一种新方法的含义。