Effective C# 3rd 読書メモ 20 順序関係はIComparableとIComparerで実装する

独自に定義する型をコレクションがソートしたり検索したりするときのために、順序関係を必要とする場合がある。.NET Frameworkは、順序関係を実装するために2つのインターフェイスを提供している。IComparable …

Effective C# 3rd 読書メモ 19 実行時型チェックを使ってジェネリックのアルゴリズムを特化させる

以下のコードは、通常のEnumerable<T>とは逆順に走査を行う、ReverseEnumerable<T>の実装である、 ここでは、以下の工夫によってコピーの回数を減らし、パフォーマンスを向上 …

Effective C# 3rd 読書メモ 18 最小限かつ十分な制約を定義する

ジェネリクスの型パラメータに宣言する制約は、クラスが役割を果たすのに必要な振る舞いを特定する。 制約を行うのとは別のアプローチとして、渡された型が条件を満たすか実行時にチェックする、という方式もある。 これに対して、型パ …

Effective C# 3rd 読書メモ 17 標準的なDisposeパターンを実装する

ファイルやDB接続等、.NET Frameworkの管理下にないリソース(unmanaged resource)を利用する際は、適切な後処理を行う必要がある。.NET Frameworkにおいて標準的に利用されるパターン …

Effective C# 3rd 読書メモ 16 コンストラクタ内で仮想関数を呼び出してはいけない

仮想関数は、コンストラクタの中で(C++プログラマーにとっては)奇妙な振る舞いをする。 たとえば、以下のコードを実行すると、出力されるのは「Set by initializer」である。 class Program { …