2015-06-22 131 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

這個筆記對他來說更重要,以確保他意識到這是一種新方法的含義。 –