忍者ブログ

覚醒できるゲームを作るブログ

素人ゲーム開発を垂れ流しつつ、覚醒に至るまでの記録や役立ち情報、愚痴を書くブログ。ちなみに前立腺の開発もやっている。

Unity、というかC#を勉強中
以前にも書いたように、UnityにはECSと言うものがありまして
そちらを使うために今まで使ってこなかった命令を勉強中です。


基本的にこのECSは「MonoBehaviour」を使わない(最終的には変換時使う?)
方法を使うようで、その命令の一部に「抽象クラス(abstract)」と言うものが
出てきます。スクリプトを作る際、継承自体Unityでは基本的に「MonoBehaviour」
をデフォルトで継承しているので継承系の命令も使わないし
抽象クラスの中身に出てくる「TestClass<T>」のような、いわゆるジェネリック型(と言うらしい)
の理解も全くしていないものが出てきます。



実際はUnityの「Monobehaviour」でも使われていたんですが、この「< >」の意味が分からないまま
使っていましたってのが正確な表現でしょうか。


Unityでなくとも「リスト(配列)」などでも使ってますね。


// 配列
var List   =   new  List<string>();


又は・・・
// コンポーネント
Text 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

コメント

コメントを書く