C#的Compiler Error CS1660
原文地址:http://stackoverflow.com/questions/3926500/base-invoke-with-delegates
问题:
I am invoking a delegate and I'm not very informed about how it works and I have compilation errors because of it (Compiler Error CS1660). This is
the code I have for it:
原因:
this is because Invoke accepts Delegate which
is not (sic!) a delegate type as far as the C# compiler is concerned. A delegate type should define a call signature, while Delegate does
not and is just a common ancestor. The expression delegate
{ ... } has type... try to guess... anonymous delegate(if it was a method it would be method group). They are not delegate types either! But they can be implicitly converted to a delegate type that has a matching signature. And delegate
types can be implicitly converted to Delegate.
Action is: public
delegate void Action();
simply, chains:
-
Anonymous method→Delegate: no conversion exists -
Anonymous method→Action: implicit conversion if signature matches -
Action→Delegate: implicit conversion (Actionis descendant ofDelegate)
Combine them:
-
Anonymous method→Action→Delegate: it works!
浙公网安备 33010602011771号