9

何らかの理由で (私は C# を初めて使用し、Java と C++ を知っています)、C# は値渡ししたいときにオブジェクトをコピーし続けます。クラスの配列リストがあり、Vector2値を増やしたいときはいつでもこれを行う必要があります。

Vector2 d = (Vector2) myObjects[i];
d.Y++;
myObjects [i] = d;

私はこれを行うことができるようにしたい:

Vector2 d = (Vector2) myObjects[i];
d.Y++;

そして行われます。私はウェブを検索しましたが、驚くべきことに答えはありませんでした。ところで、ベクトルは構造体です。

4

2 に答える 2

10

C# では、classes のインスタンスは参照として渡されますが、structs のインスタンスはコピーによって渡されます (デフォルト)。

答えは、本来あるべき場所でした: http://msdn.microsoft.com/en-us/library/vstudio/ms173109.aspx

クラスは参照型です。クラスのオブジェクトが作成されると、オブジェクトが割り当てられる変数は、そのメモリへの参照のみを保持します。オブジェクト参照が新しい変数に割り当てられると、新しい変数は元のオブジェクトを参照します。どちらの変数も同じデータを参照するため、一方の変数で行われた変更は他方の変数に反映されます。

構造体は値型です。構造体が作成されると、構造体が割り当てられた変数が構造体の実際のデータを保持します。構造体が新しい変数に割り当てられると、それがコピーされます。したがって、新しい変数と元の変数には、同じデータの 2 つの別個のコピーが含まれます。1 つのコピーに加えられた変更は、他のコピーには影響しません。

于 2013-10-19T01:16:52.070 に答える