以前にも書いたように、UnityにはECSと言うものがありまして
そちらを使うために今まで使ってこなかった命令を勉強中です。
基本的にこのECSは「MonoBehaviour」を使わない(最終的には変換時使う?)
方法を使うようで、その命令の一部に「抽象クラス(abstract)」と言うものが
出てきます。スクリプトを作る際、継承自体Unityでは基本的に「MonoBehaviour」
をデフォルトで継承しているので継承系の命令も使わないし
抽象クラスの中身に出てくる「TestClass<T>」のような、いわゆるジェネリック型(と言うらしい)
の理解も全くしていないものが出てきます。
実際はUnityの「Monobehaviour」でも使われていたんですが、この「< >」の意味が分からないまま
使っていましたってのが正確な表現でしょうか。
Unityでなくとも「リスト(配列)」などでも使ってますね。
// 配列
var List = new List<string>();
又は・・・ |
// コンポーネント
Text a = Getcomponent<Text>(); |
この用に知らず知らずの内に使っていたものの、実際
何なのかがよく分からないでいました。
これを
ジェネリックと言うみたいなのですが(薬のほうじゃない)
なんと・・・関数の定義側の
引数の型
が自在に変えられるもののようです!
ちょっとこれでは説明が良く分かりませんね。
この場合は「
Getcomponent<
Text>()」ですが
分かりやすいように敢えて関数として例えますね。
main
{
Test<int>();
}
// 関数の定義
void Test(String string)
{ ↑この型がintに変わる!!!
String a = string;
↑この型がintに変わる!!
} |
このような事になっているようです。
こちらは関数ではなくメソッドですが
Getcomponent<
Text>();
この場合、<>で囲われた中に書いた型が上のStringの引数から
Text型に変化する様です。C言語系は定義してる側の引数の型が固定
と言うのが常識ですが、この部分を自在に変えることが出来るみたいなんですね~
public Class Test<T>
{
// メソッド
public T Method(T val){
var T resault = val ;
return val;
}
} |
このように「
T」の部分が、変化します。
インスタンス化して
Test test =
new Test();
このように書いた後、
test.
Method<
Text>(
"文字")
と書いた場合に、上の様にMethodの定義した「
T」の部分が
全て
Textに変換されてしまうという事らしいです。
()の中の
"文字"は、Testクラスの中に作ったmethod関数の定義の
「
T」の部分が
Textに変換され、引数である()の
"文字"が内部で
Text型の
"文字"として処理される模様。