C# フォームの継承

フォームの継承を使うことは希だとは思うが、
デバイス毎に、ライブラリがあり、その違いを吸収するために、
継承を使おうと思ったのだが、

たとえば、Delphiだと、
親のフォーム(配下のコンポネント含む)にイベント記述したら、
継承した子のフォームで、同じイベントに記述した場合、

親のイベントは、無視される。

親のイベントを処理したい場合は、イベントコード中の好きな箇所で、

inherited;

と書くことで、親のイベントを処理してくれる。


かし、C# (今更、VS2005だが・・・)の場合、
継承した子で、新たにForm1.OnLoadに、新しいイベントを書くと、
親のイベントを実行した後、子のイベントが実行される。

デザイナーのコードを見れば、

Load += Form1_Load()

と書かれている。
子のデザイナーのコードにも、同じように書かれている。
-= なんて、記述も出来るらしい。

つまり、親を処理した後、子のイベントを処理する仕様・・・

これって、他言語だと、普通なのか?
全然、文献が出てこなかったが、

[Effective C#] 項目35 イベントハンドらよりもオーバーライドを優先する

を読んで、何となく推測し、書き直してみた。

イベントは、一番上の親に記述し、
その中で別の継承可能な関数を呼び出す。

private void Form1_Load(object sender, EventArgs e)
{
 //
 OnLoad(sender, e);
}
public virtual void OnLoad(object sender, EventArgs e)
{
  // 実行したい処理@親
  a * 1+1
}

子にフォームでは、OnLoadにイベントを追加することなく、

public override void OnLoad(object sender, EventArgs e)
{
  // 実行したい処理@子
  a = 1 + 2;
}

こうやって、Overrideするのが、正解みたい。

手間のかかることを・・・

PS.
2年前に書いたコードだが、無理矢理なコードを書いていたものだ。
一番ひどいのは、form1 から form2 にDataSourceの受け渡しがわからず、
form2のデザイナーのコード上で、form1.DataSourceを渡していた。
コンポーネントにアクセス出来なかったんだが、
private を public を変えるプロパティーを見つけ、解決。

ずいぶん、普通なコードが書けるようになったわな。

-

Macbook Pro 瀕死のその後。

ダメ元で、アップルさんに持っていく前に、

試しに、
半田で直す業者さんに問い合わせてみた。
電源部分だけなら、2~3.5万。
ロジックボードまで行くと、8~10万。
という、概算。

心斎橋は、4日先までいっぱいだったので、渋谷へ。
(次の日の予約が取れたので、仕事ついでに)

で、
行って見たさ。

さばけるのかって言うぐらい、すごい人・・・

ほとんどの人は、予約無しに来た人っぽい。

こちとら、予約済みなので、5分ぐらいの待ちで、テーブルへ。
そして、症状を説明。

充電できず、画面にチャージの・・・(以下省略
「Macbook Pro 瀕死」を参照

2,3万は覚悟していたが、値段を聞いて、驚いた・・・

もう二度と、マックなんて買うかと思っていたけど、

4150円+消費税

もう一度、聞き直したぐらい、お安い・・・

で、一応、
ロジックボードの故障はないことは、
液晶にチャージのロゴが表示されていることから、ないことは、わかっていたが、
万が一、そうなった場合の概算を聞いてみた。

39000+消費税

もちろん、聞き直したさ。

39000+消費税

?

理由を聞くと、
遠方などで持ち込み出来ない方々の、
電話で修理で受け付けるため、天井をもうけてるそうな。

ただ、液晶割れの場合は、新品を買おうか考えるお値段に・・・

とりま、4500円を超える場合は、電話をもらう体で。

ただ、
郵送も出来ず、心斎橋での受け取りもできず、
渋谷でのみ、受け取りができるそうで、

お迎えに行ってあがなければなりませんっOrz。

PS.
SSD半田付けの機器は、
それだけ取り出して、データの抽出が出来ないのが、難。

バックアップ必須ですよ!

-