• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:仮想メソッドをoverrideすると怪しい動作)

C#の仮想メソッドのoverrideによる怪しい動作の原因とは?

このQ&Aのポイント
  • C#で仮想メソッドの勉強をしていますが、Form2でoverrideしたメソッドが2回呼ばれる問題が発生しています。
  • Form1でボタンを押すとフォームが閉じるメソッドを書き、Form2でそのメソッドを再定義してメッセージボックスを表示させるようにしました。
  • しかし、Form2でcmdCloseボタンをクリックすると、「閉じます」というメッセージが2回表示されてしまいます。この問題の原因を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

継承もとのForm1にある cmdCloseのModifiersは『Private』のままでしょうか? それとも Form2などでも参照等ができるように 『Protected』に変更したとか … Protectedに変更して Form2のコンストラクターなどで cmdClose.Click += cmdClose_Click; などとしているのであれば Form1クラスで定義されたハンドラによる呼び出しと Form2で追加されたハンドラの 2回呼び出されるのではないかと思います

mellow91
質問者

お礼

ご回答ありがとうございます。Modifiersはprotectedに変更されています。お教え頂いた通りの現象でした!ありがとうございます!

その他の回答 (1)

回答No.1

単純に2度ハンドラを設定しているのではないでしょうか。 Form1でハンドラを設定し,さらにForm2でもハンドラを設定すれば,計2度ハンドラを設定することになります。

mellow91
質問者

お礼

ご回答ありがとうございます。ご説明頂いたのに私の中で理解できません。大変お手数ですが、もう少しご説明頂くと嬉しいです。ありがとうございます。

関連するQ&A