- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:仮想メソッドをoverrideすると怪しい動作)
C#の仮想メソッドのoverrideによる怪しい動作の原因とは?
このQ&Aのポイント
- C#で仮想メソッドの勉強をしていますが、Form2でoverrideしたメソッドが2回呼ばれる問題が発生しています。
- Form1でボタンを押すとフォームが閉じるメソッドを書き、Form2でそのメソッドを再定義してメッセージボックスを表示させるようにしました。
- しかし、Form2でcmdCloseボタンをクリックすると、「閉じます」というメッセージが2回表示されてしまいます。この問題の原因を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
継承もとのForm1にある cmdCloseのModifiersは『Private』のままでしょうか? それとも Form2などでも参照等ができるように 『Protected』に変更したとか … Protectedに変更して Form2のコンストラクターなどで cmdClose.Click += cmdClose_Click; などとしているのであれば Form1クラスで定義されたハンドラによる呼び出しと Form2で追加されたハンドラの 2回呼び出されるのではないかと思います
その他の回答 (1)
- Yune-Kichi
- ベストアンサー率74% (465/626)
回答No.1
単純に2度ハンドラを設定しているのではないでしょうか。 Form1でハンドラを設定し,さらにForm2でもハンドラを設定すれば,計2度ハンドラを設定することになります。
質問者
お礼
ご回答ありがとうございます。ご説明頂いたのに私の中で理解できません。大変お手数ですが、もう少しご説明頂くと嬉しいです。ありがとうございます。
お礼
ご回答ありがとうございます。Modifiersはprotectedに変更されています。お教え頂いた通りの現象でした!ありがとうございます!