ジェネリックの型制約
where句を使うと、型パラメータに制約をかけられる。
class MyClass1<T>
where T : class // TはクラスならなんでもOK
{
}
class MyClass2{}
class MyClass3<T>
where T : MyClass2 // TはMyClass2、またはその派生クラス
{
}
複数指定する場合。
class MyClass1{}
class MyClass2{}
class MyClass1<T, U>
where T : MyClass1
where U : MyClass2
{
}
値型を型パラメータで扱う
class MyClass<T>
where T : struct // Tは値型
{
private T m_param;
}
{
MyClass<int> myClass = new MyClass<int>();
}
enumを型パラメータで扱う
enumは値型に含まれるので、intと同様に型制約の指定ができる。
class MyClass<T>
where T : struct // Tは値型
{
private T m_param;
}
enum MyEnum
{
INDEX0 = 0,
INDEX1,
INDEX2
}
{
MyClass<MyEnum> myClass = new MyClass<MyEnum>();
myClass.m_param = MyEnum.INDEX0;
}
## 参考サイト
where (ジェネリック型制約)
https://msdn.microsoft.com/ja-jp/library/bb384067.aspx