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 (Action is descendant of Delegate)

Combine them:

  • Anonymous method → Action → Delegate: it works!
尝试以下代码即可解决:





posted @ 2011-09-22 00:55  郑小明  阅读(664)  评论(0编辑  收藏  举报