0
public class A : Form
{
  buttonOK;
}
public class B : A
{
}

buttonOKクラス Aのクリック イベントにはハンドラーがbuttonOK_Clickあり、クラス B でそれを無効にして、新しいクリック イベント ハンドラーを追加したいと考えていますbuttonOK

buttonOK_Clickクラス Aのアクセシビリティを as に設定し、キーワードをprotected使用してクラス B で非表示にすることはできますか?new

4

3 に答える 3

4

派生クラスは、基本クラスに「到達」して実装を変更することはできません。最善の方法は、基本クラスでイベント ハンドラーを作成virtualし、派生クラスでオーバーライドできるようにすることです。

于 2013-06-17T03:21:50.053 に答える
3

「New」キーワードを使用すると、ボタン クリック イベントの登録が中断されるため、クラス B の buttonOK_click は実行されません。2 つの一般的な方法は次のとおりです。

1 基本クラスで buttonOK_client を virtual として宣言し、派生クラスでオーバーライドします。

2 基本クラスに Validate 仮想関数を導入し、基本クラスと派生クラスで異なる実装を提供します。

 public class A : Form
 {
    void buttonOK(...)
    {
        if (Validate())
        {
            //...
        }
    }

    virtual bool Validate()
    {
        //...
    }
 }
 public class B : A
 {
    override bool Validate()
    {
        //...
    }
 }
于 2013-06-17T03:47:59.433 に答える