为什么重写方法在c#中执行两次而不是一次?

Hel*_*ays 0 c# inheritance

我有一个基类和一个派生类.基类有一个带有虚拟保护按钮单击方法的简单按钮.

我正在使用ovverride关键字(不使用new,因为我希望派生类中的buttonclick方法覆盖基类buttonclick方法)

但是,派生类buttonclick方法中的代码执行两次而不是一次

这是代码示例

在基类:

this.ok.Click += new System.EventHandler(this.ok_Click);
    protected virtual void ok_Click(object sender, EventArgs e)
            {
                MessageBox.Show("From the Base class");
            }
Run Code Online (Sandbox Code Playgroud)

在派生类中:

 this.ok.Click += new System.EventHandler(this.ok_Click);
 protected override void ok_Click(object sender, EventArgs e)
            {
                MessageBox.Show("From the Derived class");
            }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

你还没有说实际调用该buttonclick方法的是什么,但我怀疑它是一个事件处理程序......我怀疑你是在子类和基类构造函数中订阅它.不要这样做 - 你只需要订阅一次.

(如果情况并非如此,请展示一个简短但完整的例子.)