使用事件处理程序与重写事件触发方法

我正在创建Button的子类,并希望为其某些事件(如OnClick)添加自定义function。 这是更理想的方式吗? 我是否重写OnClick:

protected override void OnClick(EventArgs e) { base.OnClick(e); doStuff(); } 

或者我应该通过设计器将OnClick事件链接到我的Button子类中定义的事件处理程序?

 class ButtonSubclass { public ButtonSubclass() : base() { InitializeComponent(); } private void InitializeComponent() { this.Click += new System.EventHandler(this.ButtonSubclass_Click); } } 

编辑 :我添加了一些小的视觉变化(可能会作为基本的皮肤传递),但大多数更改都在事件处理程序中,我不想在每个重用它的表单上重新实现(复制粘贴)。

如果你真的专注于按钮,那么覆盖OnClick是有意义的。 如果你实际上只是改变了单击按钮时发生的事情,我首先不会将Button子类化 – 我只是添加了事件处理程序。

编辑:只是为了给出更多想法 – 如果你想为多个按钮添加类似的事件处理程序,那么编写一个实用程序方法就可以轻松完成,并从多个地方调用它。 它不需要实际的子类化。 这并不是说子类在你的情况下肯定错的,当然 – 只是给你额外的选择:)

inheritance时始终覆盖OnClick。 它为您提供更好的性能。

实际上,附加事件处理程序而不是覆盖方法有一个优点。 您的事件处理程序是私有的 ,而您的重写方法必须使用预定义的名称进行保护 。 如果您使用混淆/加密工具来保护您的应用程序,那么当您的代码protected overrideprivate代码更容易暴露。

对于按钮单击,我会将其作为一种阅读方法。 但我想这是个人喜好的事情。 我有兴趣看看这个共识是什么。