【Unity開発】Generic(ジェネリック)まとめ【ひよこエッセンス】
Unity5.0.0f4 Personal(2015年5月)
ひよこエッセンスの時間です〜
今回はC#の機能であるジェネリックについてです〜
Unityの公式チュートリアルUnity - Genericsを参考にしました〜
ジェネリックまとめ
①ジェネリックとは
ジェネリックとは、初めから型を決めておかないで(List<T>等)、後から型をこちらから指定する(List<int>等)ことによって、その型を使うという手法です〜
ジェネリックを使うにはソースの一番上のほうに「using System.Collections.Generic」と書く必要があります〜
それでは例を見ていきます〜
②ジェネリック・リストの例
ジェネリックで一番よく使うのは恐らく、ジェネリック・リストです〜以下に例を示します〜
ジェネリック・リストは可変長の配列で、型名は自分で自由に決められます〜Listのあとの<>の中に好きな型を指定します〜今回はint型を指定し、for文で10回分のint型変数を挿入しました〜
Listの中身:10
③ジェネリック・メソッドの例
ジェネリックを使ったメソッドも存在します〜まずは下のSomeOtherスクリプトを作成して下さい〜オブジェクトには取り付けなくて大丈夫です〜
次に下のSomeOtherClassスクリプトを、Cubeなど適当なオブジェクトに取り付けます〜
実行結果は以下のようになります〜
SomeClassスクリプトのGenericMethodが、ジェネリック・メソッドそのものです〜
<T>は型引数を表し、ここに指定した型、今回でいうところのintが入ります〜
他にも引数paramの型や戻り値としてTと書かれていますが、これらは全て型引数として指定されたintが入ります〜
今回はサンプルなので、returnによってそのままint型の変数が戻り値として返されています〜
次にGenericMethodを呼び出すSomeOtherClassスクリプトを見てみましょう〜
SomeClassクラスをインスタンス化し、SomeClassクラスのGenericMethodメソッドを呼び出しています〜
呼び出す際に<int>という記述がありますが、ここで型引数として指定しメソッドを実行しているというわけです〜
ジェネリック・メソッドの例の最後に、型の条件指定について説明します〜
型をある程度制限したい場合、「where T : 型が満たすべき条件」という記述を、引数の後ろに付けると実現します〜つまり、
アクセスレベル 戻り値の型 メソッド名<型引数> (引数リスト) where 型引数中の型が満たすべき条件
という形でメソッドを書くことにより、型引数を制限することができます〜
int型でやろうとしたのですが、int型だとエラーとなってしまうため、型引数の制限は保留とさせて下さい〜
④ジェネリック・クラス
ジェネリックを使ったクラスも存在します〜まずは下のGenericClassスクリプトを作成して下さい〜オブジェクトには取り付けなくて大丈夫です〜
次に下のGenericClassExampleを作成し、Cube等適当なオブジェクトに取り付け、実行して下さい〜
実行結果です〜
引数として渡したint型の5が表示される
基本的にはジェネリック・メソッドと同じ考え方です〜
ジェネリック・クラス名の右隣りに<T>と書いておき、ジェネリック・クラス内に型名をTにした変数を作っておきます〜
ジェネリック・クラスをインスタンス化する時に<型名>を指定してあげて実行すると、その型がジェネリック・クラスへ引数として渡され、型が確定します〜
なかなか使いドコロは思いつかないですが、上手に活用していきたいですね〜
以上、ひよこエッセンスでした〜
ありがとうございました〜