『究極のC#プログラミング』 Part1 C#3.0

プロジェクトのプロパティから.NET Frameworkのバージョンを選択できる


C#3.0のメリット
メソッドにラムダ式を渡せるので、拡張性(既存のメソッドを変更することなく新しい処理を追加できる)、メンテナンス性、可読性が上がる
コードの遅延実行ができる(未来に行う処理をラムダ式として保管しておき、実行するタイミングになった時に実行させる)


これらのことはインターフェースでも出来るがコードが多くなる


C#3.0ではカスタマイズの主体がクラスではなくメソッドである
クラスの立場が大幅に後退し、単なるフィールド、メソッドの入れ物としか機能してないことも多くなった
静的クラスの価値が高まった


C#3.0はクラスベースのOOPでありながら、JavaScriptのプロトタイプベースのような書き方もできる


プロトタイプベースの最初の言語は1986年に設計されたSelfという言語である
プロトタイプベースというのは、クラスベースの問題
・変化に対する弱さ
・例外「的」処理に対する弱さ
を解決するために考案された


変化に対する弱さとは、基底クラスの変更が派生クラス全体に影響を与えてしまうリスクを指す
例外的処理に対する弱さとは、クラス設計時に想定しなかったような特殊な処理が要求されてきた時に、連鎖的に多数のクラスの変更を余儀なくされるということ


クラスベースではなく、「クラス」の問題には
・機能の過剰な強力さ ラムダ式で済む問題にいちいちクラスを使ってしまうと、パワフルすぎてプログラマーが振り回されがち
・多重継承の禁止 多重継承抜きではうまく扱えない問題がある
がある


JavaScriptと違って、C#3.0は強い型付けがされたタイプセーフな言語である
むしろジェネリックの導入によりより厳格な型チェックがされるようになったといってよい


クラスが主体で無くなったことで、継承の使用頻度が減って、キャストの出番も少なくなった
キャストが減れば、実行時の型不整合も起こりにくい