C# オブジェクト指向 基礎知識

原則

カプセル化、継承、ポリモーフィズム

オブジェクト指向は変更に柔軟に対応が目的なので、変更されやすい箇所をクラスに抽出する。

継承の本質はinterfaceでクラスの継承はあまり使わない。

機能を隠蔽化し、どのような操作を受けつけるかを設計することがカプセル化で重要。
そしてそのカプセル化にどのような名前を付けるかが重要。

別視点

クラスはユーザー型と考える。

内部で独自に状態を維持管理できる変数を持ったメソッドと考える。

ポリモーフィズム

アップキャストは問題ない。ダウンキャストは明示キャストが必要。

ダウンキャストの変換はキャスト元の変数が保持しているインスタンスがキャスト先のクラスと同じの必要がある。通常、アップキャストして戻すときにダウンキャストが発生する。

virtual-overrideがなくても基底クラスでの定義されたメソッドは派生クラスで上書(隠蔽)きできる。ただコンパイラが警告は出す。その状態だと変数の型で呼び出されるメソッドが決まる。virtualだけ付けてoverrideを付けないと同じく変数の型で呼び出す。virtual-overrideがついてインスタンスの型で呼び出す。派生クラスでoverrideだけ付けてvirtualがないとコンパイルエラーになる。

virtual-overrideされるとインスタンスの型で呼ばれるメソッドが決まる。

メソッドのシグネチャ

メソッド名、パラメータの数、順序、型
CLRでは戻り値の型をシグネチャに含めているのでC#/VBとは違う。