【学習】WinFormsで学ぶ「継承」入門(なぜButtonのプロパティはあんなに多いのか)
WinForms で Button を配置すると、プロパティウィンドウに 大量の項目 が表示されます。
- Size
- Location
- BackColor
- Font
- Enabled
- Visible
- Dock
- Anchor
「Button ってこんなに機能あったっけ?」と感じたことはないでしょうか。
今回は、その正体が 継承 だと分かると、プロパティの見方や「まとめて同じ操作をする」コードの意味がつながります。
シリーズ目次: WinFormsで学ぶ「継承」入門(シリーズ目次)
今日学ぶこと
- Button のプロパティが多い理由 … 多くは
Controlから受け継いでいる - 継承 … 別のクラスの性質を引き継ぐこと
- is-a と has-a … 継承で使えるかどうかの見分け方
Controlとしてまとめて扱う …foreachで共通プロパティにアクセスするイメージ
Button を置くとプロパティが大量に見える
プロパティウィンドウを開くと、見た目・配置・有効/無効など、さまざまな項目が並びます。これらの多くは、「Button だから」というより「画面に載る部品(コントロール)だから」 そろっているものです。
Button クラスの正体
実は、Button が 単独で これらすべての機能を持っているわけではありません。
.NET のクラス定義では、おおまかに次のような 派生(継承)の連なり になっています(public class Button : ButtonBase のイメージ)。
public class Button : ButtonBase
{
// ...
}
さらに遡ると、次のような階層になっています。
Button
└ ButtonBase
└ Control
└ Component
└ Object
授業や記事では、まず 「Button は Control の一種」 と押さえると足がかりになります。Component や Objectは、必要になったタイミングで別の記事で触れると負担が少ないです。
プロパティが多い理由
結論はシンプルです。
Button は Control クラスの機能をそのまま引き継いでいる
そのうえで、Button らしさ(見た目やクリックの振る舞いなど)が 追加 されています。だからプロパティウィンドウには、「コントロール共通」と「ボタンらしい項目」が 両方 並びます。
Button 自身の機能(ほんの一部)
Button らしいプロパティの例です。
- Text
- Image
- FlatStyle
実際に使っている機能(ほとんどこれ)
次のような項目は、授業の最初のうち とくによく触る 部類です。
- Size
- Location
- BackColor
- Font
- Enabled
- Visible
これらは Button 専用というより、Control 側の機能 として理解できます。
継承とは何か(ここが重要)
継承 とは、
あるクラスが、別のクラスの性質(メンバーや振る舞い)を引き継ぐこと
です。WinForms では「画面に載る部品」が共通の親を持つので、見た目は違っても、土台のプロパティやメソッドが共通 になります。
is-a の関係で考える
継承が成り立つかどうかは、次の一文で判断できます。
「○○ は △△ の一種か?」
正しい例
- Button is a Control
- Label is a Control
- TextBox is a Control
いずれも 「画面に載るコントロールの一種」 として成立します。
間違えやすい例(重要)
次のような例は is-a としては成立しません。
- アプリ is a スマホ ❌
スマホの上でアプリが 動いている のは、所有・利用(中に含まれる・使う) の関係です。
👉 利用(has-a)の関係 と整理します。
整理すると
| 種類 | 関係 | 例 |
|---|---|---|
| 継承 | is-a | Button is a Control |
| 利用 | has-a | アプリ has a スマホ(の上で動く、など) |
継承のメリット
同じ Control を継承しているので、Control 型としてまとめて扱える ことが大きなメリットです。
実例コード
フォームに載っている 直下の子コントロール を列挙し、それぞれの背景色を変える例です。
foreach (Control c in this.Controls)
{
c.BackColor = Color.Red;
}
Controls は 直下の子だけ です。入れ子になったパネルの中まで一気に辿る話は、別の回(コントロールの親子と列挙)で扱うと整理しやすいです。
何が起きるか
- Button → 赤になる
- Label → 赤になる
- TextBox → 赤になる
型は違っても、Control として同じように BackColor を触れます。
なぜこれが重要なのか
違う見た目の部品を、同じ型(の基準)で扱える
これがオブジェクト指向でよく言われる 再利用・拡張・まとめて処理 の入り口です。次の回では、MyButton のように 自分でクラスを派生させる 体験へつなげられます。
まとめ
- Button のプロパティが多い理由の多くは 継承(親クラスから受け継いでいる)
- よく触る見た目・配置まわりは
Control側の機能 として理解できる - 継承は 「is-a」 で判断する
- has-a(利用) と混同しない
- 同じ親を持つことで
Controlとしてまとめて扱える
授業での一言
Button は「ボタン専用の小さなクラス」だけではなく、Control の機能を土台として持ったクラス です。プロパティウィンドウを見るたびに 「これは共通? ボタン専用?」 と分ける癖をつけると、あとで楽になります。
次のステップ
- シリーズ続き: WinFormsで学ぶ「継承」入門(シリーズ目次)(
MyButton・共通処理・ポリモーフィズムを予定) - 親子と
Controls: WinFormsの「ドラッグ&ドロップ」の正体シリーズ



ディスカッション
コメント一覧
まだ、コメントがありません