Open2
C#のジェネリック
複数の型パラメータ
// 複数の型を指定する場合は、Tの後に説明的な名前を付ける
public class KeyValue<Tkey, TValue>
{
public Tkey Key { get; set; }
public TValue Value { get; set; }
}
// 指定する型が1つの場合は、"T"という名前にする
public class KeyValue<T>
{
public int Key { get; set; }
public T Value { get; set; }
}
型パラメータの制約
制約の付け方:where
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
};
// Tに指定できる型をProductに限定する
public class KeyValue<T> where T : Product
{
public int Key { get; set; }
public T Value { get; set; }
}
// 使う側
// ok
var a = new KeyValue<Product>();
// ProductまたはProductを継承するサブクラス以外は指定できない
// 型 'string' はジェネリック型またはメソッド 'KeyValue<T>' 内で型パラメーター 'T' として使用できません。'string' から 'Product' への暗黙的な参照変換がありません。
var b = new KeyValue<string>();