T.TAO
Back to Blog
/4 min read/Blog

Unity Engine #0 C#

Unity Engine #0 C#

Unity Engine #0 C#

このノートは主にC#言語についてです。Unityの特性を完全に理解するには、C#言語から始める必要があります。この部分は型にはまった内容ですが、プログラムのパフォーマンス向上と動作の理解に大いに役立ちます。

基本概念

C#では2種類の型に分かれます。

値型:int, short, long, sbyte, bool, float, char, struct, enum

参照型:string, object, delegate, interface, class, array

以下の違いがあります:

  • メモリスタック:スレッドスタック、値型と参照型のマネージヒープ内のアドレスを格納。スタック上の値型はスコープ終了後にクリーンアップされ、効率が高い。
  • マネージヒープ:参照型を格納。マネージヒープ内のオブジェクトはガベージコレクタ(GC)が管理・解放する。

値と参照

  1. 単独の値型変数(例:関数のローカル変数)はすべてスタック上で管理される。
  2. 値型がカスタムclassのフィールド・プロパティである場合、スタックに独立して格納されず、参照型とともにマネージヒープに格納される。
  3. すべての参照型はマネージヒープに格納される。
  4. 値型変数を別の変数に代入(またはパラメータとして渡す)と、値のコピーが実行される。参照型変数を別の参照型変数に代入すると、コピーされるのは参照オブジェクトのメモリアドレスなので、代入後は複数の変数が同じ参照オブジェクトインスタンスを指す。

outとrefキーワード

  1. outとrefはどちらもコンパイラにパラメータのアドレスを渡すよう指示し、動作は同じ。
  2. refは使用前にパラメータを明示的に初期化する必要があり、outはメソッド内で初期化する必要がある。
  3. outとrefはオーバーロードに使えない。

String型

stringは参照型として特別な性質があります。stringの変更は実際には新しいstringをnewしています。新しい参照型をnewするたびにヒープに新しい領域が確保されます。頻繁に文字列を変更する場合は、Stringの代わりにStringBuilderクラスを使用します。

ガベージコレクタ / GC

GCはC#に組み込みのガベージコレクタです。メモリ内で使用されなくなった内容を管理します。GC操作はパフォーマンスに大きく影響するため、GCを避けるべきです。

ボクシング / アンボクシング

ボクシングは値型を参照型、またはその値型が実装するインターフェース型に変換する過程です。アンボクシングはその逆です。ボクシングとアンボクシングは実際にGCを増やします。ボクシング・アンボクシング操作を減らすべきです。