2016年5月27日金曜日

[C#] 継承とSealedクラス

こんにちは。明月です。
今日は継承とSealedクラスについて勉強します。OOPの特徴は抽象化、継承、多型、カプセル化があります。カプセルの場合はアクセス修飾子を勉強する時に説明したことがあります。


[C#] アクセス修飾子(public, private, protected)


今日はOOPの特徴の中の継承について勉強しましょう。


継承


この間にクラス、メソッド、プロパティ、変数の使用方法について勉強しました。正直にプログラムはその4つだけを知っても実装ができます。
でも、プロジェクトが大きくなればなるほどその4つだけで実装が大変だし、出来上がった後を考えるとメンテおよびソース管理がすごく大変になると思います。
その理由で継承は実装と管理のために使うと思っても結構です。


継承の意味は親クラスから機能を引継いでもらい子クラスを生成することです。





上の例をみると「successionBClass」を割り当てて「Data1」のプロパティを呼び出します。でも「successionBClass」クラス内部には「Data1」のプロパティがありません。
しかし例の結果を見ると「successionBClass」に「Data1」のデータが格納されるし、結果としても出力されます。
なぜなら、「successionBClass」クラスは「successionAClass」クラスから機能をすべて継承したからのです。すなわち、「successionBClass」クラスは「successionAClass」クラスの機能をすべて使われると意味ですね。



上の例を見ると「successionBClass」クラスの場合は「successionAClass」、「successionCClass」クラスと「successionDClass」クラスの場合は「successionBClass」を継承しています。
もし、「successionCClass」のクラスと「successionDClass」のクラスが継承しなくてクラス内部で「data1」、「data2」を実装すると考えてみましょう。
プロジェクト中で「data1」のデータタイプが「int」から「String」に修正することが発生すると継承しない場合は「successionCClass」のクラスと「successionDClass」のクラスを両方修正しなければならないのです。 しかし、継承していると思うと「successionAClass」だけ修正するので、修正工数も縮まるし、バグのリスク、管理的にも良いです。


Sealedクラス


継承はコード管理と生産性のために使いますが、「.Net Framwork」から提供するクラスを利用するためにも使います。




でも、継承がいいことだけあるものではありません。例えば、C#のデータタイプ型のオブジェクトを継承すると思うと逆に性能が落ちる時もありますね。
また、市販ソースコードを開発する時はモジュールは公開しなければならないけど、ソースコードは公開したくないやクラスの継承もできないようにやりたい時もあります。 (継承すると内部処理が大体に見えます。)その時に「sealed」キーワードを付けて継承防止がする方法があります。



0 件のコメント