2012-01-13 70 views
2

我定义了一个委托类型,如:关于创建委托对象 - C#

delegate void DrawShape(Brush aBrush,Rectangle aRect); 

你能告诉我,为什么下面的步骤创建委托对象的方法是正确的:

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

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

+0

我认为编译器将两行解释为相同。 – craig1231 2012-01-13 15:48:21

回答

3
DrawShape DrawRectangleMethod = CreateGraphics().FillRectangle; 

可能是由于C#2的这些只具备here隐式方法组转换。

+0

谢谢,我明白了。 – acjialiren 2012-01-13 15:59:17

+0

@acjialiren不客气:) – 2012-01-13 16:01:18

0

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

只需看一下Jons Bluffer's Guide的章节Delegates

+0

谢谢。我会在中国新年后读这本书。 – acjialiren 2012-01-13 16:36:10

1

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

+0

+1解释术语“方法组” – phoog 2012-01-13 16:04:32

+0

谢谢。在得到你的答案之前,我对方法组了解甚少。 – acjialiren 2012-01-13 16:33:11