2015-06-22 217 views
-2

我有一个非常类似于下面的例子的方法,它不会让我outoutItemC# - 无法通过覆盖方法

public override bool myMethod(string item, out string outItem) 
    { 
     outItem = ""; 
     return true; 
    } 

它一直给了以下错误:

"no suitable method found to override"

如果我删除了override,错误消失。我该如何解决这个问题?

+6

''我有一个非常类似于..“的方法,要重写,方法签名必须是完全匹配的,而不是* *类似*。 – Habib

+0

包含这个方法的类的超类是否也有这个确切的方法(名称和签名必须匹配)?如果不是,它不是一个覆盖。 – Glorfindel

+0

删除覆盖?什么是压倒性的? –

回答

4

看来基类中的方法不会将该参数标记为out。你需要符合基类的签名。如果您可以更改基类以将方法标记为out,那么您也可以在派生类型上将它标记为这样。如果您不能,那么您将无法重写该方法,您必须改为创建一个新方法。

+0

它看起来像在工作。谢谢!! – BlueFox

4

这听起来像myMethod的基类签名不使用out第二个参数。您不能仅仅添加它,因为它会更改方法签名。如果你有基类的控制,你可以添加它,但如果没有,你需要删除覆盖。

+0

请注意,如果你只是删除重写,这个方法*将不同于基类中的那个,这意味着如果你有类似'MyBase b = new MyConcrete(); bool result = b.myMethod(“hello”,out outItem);'它不会编译,因为新的方法没有在基类中定义。 –

+0

@EricJ。是的,我意识到这一点。但是如果他不能改变基地级别,他的选择是相当有限的,他将无法做到他想做的事。 – Andy

+0

这个笔记对他来说更重要,以确保他意识到这是一种新方法的含义。 –