我正在创建Button的子类,并希望为其某些事件(如OnClick)添加自定义功能。这是更理想的方式吗?我是否重写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);
}
}
编辑:我添加了一些小的视觉更改(可能会作为基本的皮肤传递),但大多数更改都在事件处理程序中,我不想重新实现(复制粘贴)每种形式都重用它。
答案 0 :(得分:27)
如果您真的专注于按钮,则覆盖OnClick
是有意义的。如果您只是实际更改单击按钮时发生的情况,我首先不会将Button
子类化 - 我只是添加事件处理程序。
答案 1 :(得分:7)
继承时始终覆盖OnClick。它可以为您提供更好的性能。
答案 2 :(得分:0)
实际上,附加事件处理程序而不是覆盖方法有一个优点。您的事件处理程序是私有,而被覆盖的方法必须是受保护的,并带有预定义的名称。如果您使用混淆/加密工具来保护您的应用程序,则代码在protected override
时比在private
时更容易曝光。
答案 3 :(得分:-2)
对于按钮单击,我会将其作为一种阅读方法。但我想这是个人喜好的事情。我有兴趣看看这个共识是什么。