哪个是在.NET中处理事件的首选/推荐方式:
this.Load += new EventHandler(Form1_Load); private void Form1_Load(object sender, EventArgs e) { }
要么
protected override void OnLoad(EventArgs e) { base.OnLoad(e); }
每种方法的优缺点是什么?多年来我一直使用这两种方法,并且通常更倾向于第一种方法,因为这是Visual Studio自动创建的用于处理事件的方法.我错过的第二种方法有什么好处吗?
第一种方式是微软建议的.模式是:
一些代码想要引发事件,调用OnXxx
OnXxx调用委托
调用有线事件处理程序
如果您执行第二个模型,您可能会忘记base.OnXxx调用并破坏所有内容.选项2的好处在于您可以决定是在所有其他事件处理程序之前还是之后调用.如果将代码放在base.OnXxx之前,则会在事件发生之前执行.当然第一个模型总是可以使用,第二个模型只有在你提升事件的类的子类时才会使用.
这完全取决于您想要捕获事件的位置以及原因.
第一种方法(连线)适用于您希望其他类处理事件的时间.出于多种原因,您可能需要这样做; 另一个类可以访问执行某些复杂逻辑或其他任何操作的服务.关键是当您希望单独的观察者响应事件时,您使用第一种方法.
第二种方法(覆盖)适用于您希望表单响应的时候,因为它可以; 因为它的责任是本地的.