[英]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.