==[[Effective C# 4.0]]==
[[C Sharp]] | [[Visual Studio]] | [[言語まとめ C Sharp]] |
{{amazon|4798122513}}
===イディオム===
====アクセス可能なデータメンバの代わりに常にプロパティを使用すること====
*[[.NET ]] Frameworkは、データメンバーを公開する場合、プロパティとして公開されることを前提としています*プロパティはメソッドとしての言語機能をすべて備えるため、virtualキーワードを指定することも出来るプロパティはメソッドとしての[[言語]]機能をすべて備えるため、virtualキーワードを指定することも出来る*プロパティの自動実装構文が言語によりサポートされるプロパティの自動実装構文が[[言語]]によりサポートされる
**バッキングストアと呼ばれるprivateメンバ変数、アクセッサーをコンパイラが自動実装
public class Foo
*ダウンキャストには2つの方法がある
**as演算子を利用する
**C言語以来のキャストを利用するC[[言語]]以来のキャストを利用する
*できる限りasを利用するのが最良の選択
<blockquote>as 演算子はキャスト操作とよく似ています。 ただし、変換可能でない場合、as は、例外は発生せず、null を返します。</blockquote>
Console.Write("Now Debugging.");
}
*Conditional属性によって生成される中間言語は、Conditional属性によって生成される中間[[言語]]は、#if/#endifで生成されるものより効率的
*メソッド単位でのみ指定可能という制限のため、条件により実行可否を変えるコードを明確に分離出来る
*複雑な情報を持つ型を作成する場合には、IFormattable.ToString() を実装し、書式が指定された文字列表現を取得できるようにする。
*型固有の情報を返すToString()メソッドを実装することで、開発者、使用者の時間の節約になる。
*[[C#]]3.0以降では、コンパイラがすべての匿名型に対し、デフォルトのToString()メソッドを作成する。
var test = new {Name="Me"};
Console.WriteLine(test);
====割り当て演算子よりもメンバ初期化子を使用すること====
====staticメンバは適切に初期化する====
====初期化ロジックの重複を最小化する初期化[[ロジック]]の重複を最小化する====
====using および try...finally を使用してリソースの後処理を行う====
====不必要なオブジェクトの生成を避けること====
====値型における0を正常な状態にすること====
====値型は不変かつアトミックにすること====
===デザインの表現[[デザイン]]の表現===
====型の可視性を制限すること====
====継承よりもインターフェースの定義および実装を行うこと====
*対象を実行時に決定でき、複数の相手に同時に通知できる
<blockquote>デリゲートとはメソッドへの参照を含んだオブジェクト</blockquote>
*[[C#]]にはデリゲートを表現するためのラムダ式形式の構文が用意されている
*Predicate<T>,Action<>,Func<> など一般的なデリゲート形式が数多く用意されている
====イベントパターンの実装により通知を行うこと====
====親クラスの変更に応じる場合のみnew修飾子を使用すること====
====基本クラスに定義されたメソッドをオーバーロードしないこと====
====PLINQが並列アルゴリズムを実装する方法PLINQが並列[[アルゴリズム]]を実装する方法====
====I/Oのコストが高い処理に対して、PLINQを使用する方法====
====例外を考慮した並列アルゴリズムを構成すること例外を考慮した並列[[アルゴリズム]]を構成すること====
===動的プログラミング===
====dynamic の利点と欠点を把握する====
====ジェネリック型引数の実行時型を活用するためにdynamicを使用する====
====匿名型を引数にとれるようdynamicを使用する====
====DynamicObjectあるいはIDynamicMetaObjectProvidorを使用してデータ駆動のdynamic型を作成するDynamicObjectあるいはIDynamicMetaObjectPro[[vi]]dorを使用してデータ駆動のdynamic型を作成する====
====Expression APIを活用する方法を把握する====
====式を使用して事前バインディングを遅延バインディングに切り替える====
====公開するAPIでは動的オブジェクトを最小限に抑えること====
===[[その他]]===
====ボックス化、ボックス化解除を最小限に抑える====
====完全にアプリケーション固有の例外クラスを作成する====