Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-Can';使用覆盖方法时,无法通过_C#_Overriding_Out - Fatal编程技术网

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。是的,我知道。但是如果他不能改变基类,他的选择是非常有限的,他将无法做他想做的事情。注意对他来说更重要的是,确保他意识到这是一种新方法的含义。