当我写_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;
}
答案 0 :(得分:4)
两种表单都会创建一个新的委托实例。就我所知,它们在生成的代码中是等效的。
虽然我也更喜欢方法组转换,但我怀疑这不是(在评论中指出的VS 2012之前)因为没有足够的好处而改变了。实际上,有些人甚至可能更喜欢显示创建的委托类型的更明确的形式。