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>();