2016年6月9日木曜日

[C#] Partial Type(クラス分割)、拡張メソッド

こんにちは。明月です。
今日はC#のPartial Typeと拡張メソッドについて勉強します。


プログラミングをしてみるとクラス内の処理が多くなってソース行目が長くなる場合があります。 最近はIDE(Visual Studio)がすごくよいので、ソースが大きくてもメソッド検索やプロパティ検索が早めにできますが、それでもソースが大きいのはクラスサイズが大きくなって性能が遅くなる可能性がありますね。


Partial Type


それで、コンパイルする時には1つのクラスになりますが、ソースファイルを分けて作成できる文法の「Partial Type」があります。





上の例を見ると「PartialClass」のクラスを4つに分けて作成しました。でも、「PartialClass」を割り当てて使う時には1つのクラスように使います。


筆者はクラス分割(Partial Type)を使ったことがほとんどありません。そんなにソースを長く作成する前に抽象と継承を使ってソースを減らすか、クラスが大きくなると思うと、 クラス自体を分けて実装しますね。Partial Typeを使うくらいのクラスの大きさなら割り当てする時にクラスサイズが大きいので、遅くなりますね。 ソースの長さのために使うことではなく、機能として分けて管理することように実装すれば「Partial Type」を使用することも良いと思いますね。


拡張メソッド


これからはクラス機能を追加する方法で拡張メソッドについて勉強します。クラスの機能を追加する方法ではクラスを継承してメソッドを追加する方法があります。




クラスにメソッドを拡張する時にはクラスを継承する方法が正確です。でも機能を1つだけ追加するように派生クラスを作る場合、または「sealed」になったクラス(継承できないクラス)に機能を追加する場合には継承する方法でできませんね。
そのため、C#は継承しなくてもメソッドを追加する方法で拡張メソッドを提供しています。


[C#] 継承とSealedクラス





上の例を見ると「ParentClass」クラス内では「Print2」メソッドがありません。でも「Main」で割り当てて使う方法をみるとメソッド「Print2」があるように使っています。「Print2」メソッドは「ParentClass」のクラスの内ではなく、「Program」クラスの中で「ParentClass」のメソッド拡張されて「Print2」メソッドがあるようになりました。


そして「String」クラスの場合は基本的に「sealed」キーワードが付けていて継承をできないです。



でも「String」クラスも必要によってメソッド拡張をしなければならない場合もあります。その時にはメソッド拡張機能を利用して機能追加すれば良いと思います。




拡張メソッドの機能は実際にプロジェクトする時にもよく使う機能です。プロジェクトを始まる前に普通は特殊文字列処理、特殊アルゴリズム、ログ処理等の共通メソッドを「static」タイプで実装しますね。 でも「static」形式ではなく、この拡張メソッド機能を利用すると共通関数をもっとしやすく使えることではないかと思いますね。
そのことで、比較的によく使うタイプなので、確かに認知していきましょう。

0 件のコメント