簡體   English   中英

無參數方法簽名與參數委托不匹配

[英]Parameterless method signature doesn't match params delegate

為什么不:

delegate void MyDelegate(params object[] parameters);
static void ShouldMatch() {}
MyDelegate compilerError = ShouldMatch;

編譯? 看起來應該匹配得很好。

委托MyDelegate定義了一個采用對象數組的方法,但您的ShouldMatch方法卻沒有。 假設您嘗試像這樣將任何參數傳遞給委托的實例:

compilerError(someObject, someOtherObject);

如果綁定到方法compilerError的方法不接受任何參數,那么您希望在這里發生什么?

嘗試以與委托簽名匹配的方式定義方法:

delegate void MyDelegate(params object[] parameters);
static void ShouldMatch(params object[] parameters) {}

MyDelegate noCompilerError = ShouldMatch;

或者您可以嘗試將其包裝在lambda表達式中,如下所示:

delegate void MyDelegate(params object[] parameters);
static void ShouldMatch() {}

MyDelegate noCompilerError = (paramArray) => ShouldMatch();

params是純粹的編譯時功能。
委托綁定將忽略它。

您的委托人必須完全匹配方法的參數,而忽略params和可選參數。

規范在第6.6節中明確指出:

o考慮的候選方法僅是那些以其正常形式(第7.5.3.1節)適用的方法,而不是僅以其擴展形式適用的那些方法。

§7.5.3.1說:

對於包含參數數組的功能成員,如果該功能成員符合上述規則,則可以正常形式使用。 如果包含參數數組的功能成員不能以其正常形式使用,則該功能成員可以以其擴展形式使用:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM