ジェネリックはオブジェクト指向型言語のポリモーフィズムを実現させるための仕組みの一つです。ここでは、C#のジェネリックについて解説します。
目次
ジェネリックとは
C#におけるジェネリックは特定の型(クラス)に依存しないクラスやメソッドを記述するための仕組みです。クラスやメソッドで仮の型名(型パラメータ)を用いて宣言することで、型をパラメータとして渡すことができ、コンパイル時に特定の型に対応付けることが可能となります。
ジェネリッククラス
ジェネリッククラスはクラス内部で用いる型を型パラメータとして、クラスのインスタンス化の際に指定することのできるクラスです。
ジェネリッククラスの定義
基本書式
class クラス名<型パラメータ> where 型パラメータ:制約条件
{
型パラメータ フィールド名;
型パラメータ メソッド名 ( 型パラメータ 引数 ) { }
}
クラスを定義する際は、型パラメータをTとして定義しておき、クラスをインスタンス化する際にTに特定の型を指定します。クラスの内部の定義自体は通常の型名の代わりに型パラメータを用いるだけで、それ以外は通常のクラスと変わりありません。なお、型パラメータは任意の文字列でも間違いではありませんが、Microsoftのガイドラインで型パラメータをTとすることが推奨されています。
型パラメータはカンマで区切って複数指定することも可能です。また、型パラメータに指定可能な型は、以下のように制約条件を設けて限定することが可能です。
制約条件の指定方法 | 許される型 |
where T:クラス名 | クラス、その派生クラス |
where T:インターフェース名 | インターフェース、その派生インターフェース |
where T:new() | 引数なしのコンストラクタを持つクラス |
where T:class | 参照型 |
where T:struct | 値型 |
ジェネリッククラスからのインスタンスの生成
基本書式
ジェネリッククラス名<型名> x = new ジェネリッククラス名<型名> ();
ジェネリッククラスを使う場合は、通常のクラスでは クラス名
と書くところを、ジェネリッククラス名<型名>
と置き換える必要があります。
ジェネリックメソッド
ジェネリックメソッドの定義
ジェネリックメソッドは引数と戻り値の型を型パラメータとして指定可能なメソッドです。
基本書式
型パラメータ メソッド名<型パラメータ>(型パラメータ 引数) where 型パラメータ:制約条件
{
メソッド定義
}
コメント