关于创建委托对象 - C#

时间:2012-01-13 15:45:20

标签: c# delegates

我定义了一个委托类型,如:

delegate void DrawShape(Brush aBrush,Rectangle aRect);

您能告诉我为什么以下创建委托对象的方法都是正确的:

DrawShape DrawRectangleMethod = CreateGraphics().FillRectangle;
DrawShape AnotherDrawRectangleMethod = new DrawShape(CreateGraphics().FillRectangle);

为什么没有“新”的方法可以正常工作?

3 个答案:

答案 0 :(得分:3)

DrawShape DrawRectangleMethod = CreateGraphics().FillRectangle;

是可能的,这要归功于C#2隐含的方法组转换,这些转换是规范的here

答案 1 :(得分:1)

C#非常聪明,可以为您处理方法组。方法组是没有括号的方法名称;具有不同签名的方法可能存在许多重载,但没有括号的“基本”名称称为方法组。编译器将为您插入构造函数调用,允许您编写更简洁的代码行。

答案 2 :(得分:0)

因为编译器会自动为您插入它。这只是语法糖。

只需在第Delegates章中查看Jons Bluffer's Guide