2012-01-13 71 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