Effective C# 3rd 読書メモ 25 ジェネリッククラスよりもジェネリックメソッドを使う

一般に、ジェネリッククラスよりも、非ジェネリッククラスにジェネリックメソッドが用意されている方が、使い勝手がよい。 internal class Program { public static void Main(str …

Effective C# 3rd 読書メモ 24 ベースクラス・インターフェイスを使ってジェネリックの特殊化をしない

ジェネリックメソッドを定義する際には、オーバーロードの扱いに注意が必要である。 ジェネリックメソッドは、ベースクラスがマッチするメソッドよりも優先度が高い。以下の2つのメソッドがある場合に呼び出されるオーバーロードは以下 …

Effective C# 3rd 読書メモ 23 デリゲートを使ってメソッド用の型パラメータの制約を定義する

C#のジェネリックスの型パラメータの制約には以下の種類がある。 ベースクラス(1つだけ) インターフェイス(複数可) クラスまたは構造体 パラメータのないコンストラクタ この制約だけでは、パラメータが特定のメソッドを持つ …

Effective C# 3rd 読書メモ 22 ジェネリックの共変性と反変性をサポートする

共変性(covariance)と反変性(contravariance)は、ある型が別の型に変換可能な性質をもっている、ということを意味する。可能なときはいつでも、ジェネリックなインターフェイスを装飾して、ジェネリックの共 …

Effective C# 3rd 読書メモ 21 ジェネリッククラスは必ずDisposableな型パラメータをサポートするようにする

ジェネリッククラスでIDisposableを実装している型を受け取る際は、適切にリソースを破棄する必要がある。 リソースの破棄には以下のようなイディオムが利用できる。 public void DoSomething() …