2013-02-19 32 views
2

當我寫_exporter.csvRowProcessed +=時,Visual Studio 2010提供了我創造的方法來處理該事件,然後繼續這樣做:
_exporter.csvRowProcessed += new CsvRowProcessedHandler(RowProcessedHandler);Visual Studio的C#自動事件處理程序生成。爲什麼它會創建一個新的代理?

我想知道的是,爲什麼它創建一個新的委託什麼,然後爲其分配一個處理程序方法,而不是直接將處理程序方法分配給像這樣的事件?

exporter.csvRowProcessed += RowProcessedHandler; 

這是整個代碼以防萬一。

private void bg_DoWork(object sender, DoWorkEventArgs e) 
    { 
     object[][] data = _grid.AsMatrix(); 
     _exporter.csvRowProcessed += new CsvRowProcessedHandler(RowProcessedHandler); 
     string csv = _exporter.CreateCSVString(data); 

     StreamWriter writer = new StreamWriter(_path, false); 
     writer.Write(csv); 
     writer.Close(); 
    } 

    void RowProcessedHandler(object o, int currentRow) 
    { 
     radProgressBarElement.Text = "Procesando linea " + currentRow; 
     radProgressBarElement.Value1 = currentRow; 
    } 
+0

您使用的是Resharper還是其他工具? – JMan 2013-02-19 15:33:53

+0

我正在使用Productivity Power Tools擴展,但據我所知該功能是Visual Studio原生的。 – Uri 2013-02-19 15:36:51

+0

目前尚不清楚你的編輯部分是什麼意思。通過引入一個新的局部變量來完成你已經輸入的內容,這將是非常奇怪的IMO。 – 2013-02-19 15:40:04

回答

4

兩種形式創建一個新的委託實例。就我所知,它們在生成的代碼中是等效的。

雖然我更喜歡方法組轉換,但我懷疑這不是(在2012年之前,如評論中所述)發生改變,因爲這樣做沒有足夠的好處。的確,有些人甚至可能更喜歡顯示正在創建的代表類型的更加明確的形式。

+0

謝謝。我想也許我錯過了關於代表和事件處理的一些事情。 – Uri 2013-02-19 15:35:58

+1

Visual Studio 2012正在使用方法組轉換:http://www.schwammysays.net/visual-studio-2012-tip-better-event-handler-code-completion/ - 看起來他們認爲畢竟是值得的。 – Oded 2013-02-19 15:37:17

+0

@Oded:有趣,謝謝。 – 2013-02-19 15:38:51

相關問題