連載:[完全版]究極のC#プログラミングChapter1 C# 3.0らしいプログラミングとは?川俣 晶2009/07/31 |
|
|
1.5 後退するクラスの立場
先のソートの例は、実はC# 1.xとC# 3.0の決定的な差が何であるかを非常によく表現している。
つまり、動作のカスタマイズを行うためにクラスを経由する必要性の多いC# 1.xと、クラスを経由せずメソッドのレベルで動作をカスタマイズできてしまうC# 3.0の差である。いい換えれば、C# 3.0では、動作のカスタマイズの主体がクラスではなくメソッドなのである。
C# 1.xの時代、メソッドの動作をカスタマイズするには継承やインターフェースの実装を行い、メソッド単位で動作を交換することができた。それに対してC# 3.0では、引数にラムダ式を気軽に渡すことができるため、単なる普通のメソッドの動作を外部からカスタマイズするコードを容易に書くことができるようになった。
その結果、C# 3.0プログラミングでは、クラスの立場が大幅に後退し、単なるフィールドやメソッドの入れ物としてしか機能していないことも多くなったような印象も受ける。メソッド単位で動作がカスタマイズできる以上、継承などの高度な機能は出番も大幅に減る。それどころか、インスタンス化されないクラスも珍しくはない。プログラム中でたった1つだけあればよい「入れ物」の需要はわりに多いのである。
それを考えると、「静的クラス」(C# 2.0で追加された機能)が必然的に大きな価値を持つことがわかるだろう。インスタンス化できないクラスは、C# 1.xではprivateなコンストラクタによって記述できたが、C# 2.0以降ではstaticキーワードを使った専用の構文が用意されたのである。
このような状況はどのように受け止めればよいのだろうか?
INDEX | ||
[完全版]究極のC#プログラミング | ||
Chapter1 C# 3.0らしいプログラミングとは? | 1.はじめに/本書の位置づけ | |
2.1.1 意外性あり? 本書で解説すること/C# 3.0の適用範囲/筆者の来歴 | ||
3.1.2 C# 3.0らしいソースコードとは? | ||
4.1.3 コードの遅延実行という例 | ||
5.1.4 インターフェースとの比較 | ||
6.1.5 後退するクラスの立場 | ||
7.1.6 クラスベースとプロトタイプベース | ||
8.1.7 クラスベースの問題点/【C#olumn】クラスの問題とは何か? | ||
9.1.8 JavaScriptとの相違点 | ||
10.まとめ/【C#olumn】金のハンマーと銀の弾丸―クラス至上主義 | ||
「[完全版]究極のC#プログラミング」 |
Insider.NET フォーラム 新着記事
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|