当我处理设置事件时,我通常这样写:
data.event += new data.returndataeventhandler(method);
并有一个这样的方法:
void method(parameter)
{
dosomething();
}
这是事件返回对象的时间。
我刚刚阅读了别人的代码,他们使用了一种似乎更简洁的方法,例如:
data.ReturnData += delegate(DataSet returnedDataSet)
{
dataset = returnedDataSet;
};
这种方式有什么缺点吗?
谢谢。
最佳答案
使用匿名委托(delegate)(或者 tster 建议的更干净的 Lambda)的一个主要缺点是,除非您给它某种名称,否则您以后将无法从事件中取消订阅它。
在大多数情况下,这是“没什么大不了的(tm)”,因为只要事件源消失,委托(delegate)就会消失,但如果您订阅静态事件,这可能是一个“微妙的错误(tm)”或长期对象(例如 WPF Dispatcher 对象)上的事件。
就您而言,这看起来根本不是问题,因此我绝对建议您采用 tster 的建议(假设您使用的是最新版本的 .Net):
data.ReturnData += returnedDataSet => dataset = returnedDataSet;
(编译器可以从ReturnData
的EventHandler类型推断出returnedDataSet
的类型。)
关于C# 处理事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5405495/