C#按值传递对象?

Sus*_*ers 8 c#

出于某种原因,(我是C#的新手并且知道java和c ++)当我想通过值传递时,C#会继续复制对象.我有一个Vector2类的arraylist ,每当我想增加一个值时,我必须这样做:

Vector2 d = (Vector2) myObjects[i];
d.Y++;
myObjects [i] = d;
Run Code Online (Sandbox Code Playgroud)

我希望能够这样做:

Vector2 d = (Vector2) myObjects[i];
d.Y++;
Run Code Online (Sandbox Code Playgroud)

并完成.我在网上搜索,令人惊讶的是没有答案.顺便说一句,矢量是一个结构.

Giu*_*nco 10

在C#中,classes的实例作为引用传递,而structs的实例通过复制传递(默认情况下).

答案就在那里应该是:http://msdn.microsoft.com/en-us/library/vstudio/ms173109.aspx

类是引用类型.创建类的对象时,为其分配对象的变量仅保留对该内存的引用.将对象引用分配给新变量时,新变量引用原始对象.通过一个变量进行的更改会反映在另一个变量中,因为它们都引用相同的数据.

结构是一种值类型.创建结构时,为其分配结构的变量保存结构的实际数据.将结构分配给新变量时,会复制该变量.因此,新变量和原始变量包含相同数据的两个单独副本.对一个副本所做的更改不会影响另一个副本.

  • @ NPFS3000 - 如果将类的实例传递给方法,则会生成引用的副本(因为它按值传递).这是一个微妙的区别,但请考虑一下:如果你这样做会发生什么?void SomeMethod(ClassInstance a){a = null; - 当方法返回时,传递给SomeMethod的任何变量都不会被重新赋值为null. (2认同)