2

当我编写时_exporter.csvRowProcessed +=,Visual Studio 2010 让我创建一个方法来处理所述事件,然后继续执行此操作:
_exporter.csvRowProcessed += new CsvRowProcessedHandler(RowProcessedHandler);

我想知道的是,为什么它会创建一个新的委托,然后为其分配一个处理程序方法,而不是像这样直接将处理程序方法分配给事件?

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;
    }
4

1 回答 1

4

两种形式都创建了一个新的委托实例。据我所知,它们在生成的代码中是等价的。

虽然我也更喜欢方法组转换,但我怀疑这并没有改变(在 VS 2012 之前,如评论中所述)只是因为这样做没有足够的好处。事实上,有些人甚至可能更喜欢显示正在创建的委托类型的更明确的形式。

于 2013-02-19T15:34:13.427 回答