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