通过复制或参考?

tvr*_*tvr 5 c# pass-by-reference pass-by-value

我对C#有点新,只是想知道是否有一个类(常用)列表,默认情况下作为副本传递.我该如何识别它们?

我知道基本的基本对象类型 - int,uint,float,strings,... - 是通过副本传递的.

Jar*_*Par 16

在C#/ .Net对象中可以分类为值或引用类型[1].值类型是从System.ValueTypeC#派生并使用struct类型声明定义的任何类型.这些是通过复制/值传递的.

引用类型是不System.ValueType使用class关键字从C#派生和定义的类型.引用类型实例的标识符称为引用(类似于指针).这些也是默认值传递,但只传递引用而不是整个对象.

您的问题还提到string实例是通过副本传递的. String.Net是一种引用类型(直接派生自System.Object),因此不会通过完整副本传递.

[1]指针在这里可能值得他们自己的课,但我在这个讨论中忽略了它们.


Tho*_*que 11

默认情况下,所有类型都按值传递.值types(struct)和引用类型(class)之间的区别在于,对于值类型,值的副本将传递给方法,而对于引用类型,仅传递引用.

有关详细信息,请参阅MSDN.

另外,不要混淆值/引用类型的概念,以及按值或引用传递参数的概念.有关详细信息,请参阅Jon Skeet 撰写的这篇文章

  • 不,两者都是按值传递的.在引用的情况下,虽然它是通过值传递的引用,而不是对象. (3认同)
  • 删除了我的-1,因为你纠正了你的答案. (2认同)