値型と参照型の主な違いは、
メモリ内での格納方法と
アクセス方法にあります。
値型はメモリに直接格納され、その値に直接アクセスできます。
値型のコピーに加えられた変更は、元の変数には影響しません。
参照型は、データが格納されているメモリ位置への参照を格納します。
参照型のコピーに加えられた変更は、
コピーとオリジナルの両方がメモリ内の同じ場所を参照するため、元のオブジェクトに影響を与える可能性があります。
値型と参照型の違いを示す例です。
using UnityEngine;
public class ValueTypeReferenceTypeExample : MonoBehaviour
{
void Start()
{
// Example of a value type
int num1 = 5;
int num2 = num1;
num2 = 10;
Debug.Log("num1: " + num1); // Output: num1: 5
Debug.Log("num2: " + num2); // Output: num2: 10
// Example of a reference type
int[] array1 = new int[] { 1, 2, 3 };
int[] array2 = array1;
array2[0] = 5;
Debug.Log("array1[0]: " + array1[0]); // Output: array1[0]: 5
Debug.Log("array2[0]: " + array2[0]); // Output: array2[0]: 5
}
}
上記の例では、num1 と num2 の 2 つの変数を定義しています。
これらの変数は両方とも、値をメモリに直接格納するため、値型です。
値 5 を num1 に割り当て、num2 という num1 のコピーを作成します。
次に、num2 の値を 10 に変更しますが、num1 の値は 5 のままです。
これは、値型のコピーに加えられた変更が
元の変数に影響しないことを示しています。
次に、array1 と array2 の 2 つの配列を定義します。
これらの変数はどちらも、実際のデータが格納されているメモリ位置への参照を格納するため、参照型です。
3 つの整数の配列を array1 に割り当て、array2 という名前の array1 への参照を作成します。
次に、array2 の最初の要素を 5 に変更します。これにより、array1 の最初の要素も変更されます。
これは、コピーと元の両方がメモリ内の同じ場所を参照するため、参照型のコピーに加えられた変更が
元のオブジェクトに影響を与える可能性があることを示しています。
値型と参照型の違いを理解することで、Unity C# でより効率的かつ効果的なコードを記述できます。