2

因此,当我测试使用参数创建的方法时DataRow,我发送了一个参数并在方法内部对其进行了修改。在那之后,我的原件DataRow改变了它最终在该方法之后的任何内容。我意识到这是因为DataRow它是一个“参考类型”,这对我来说是新的。

DataRow我现在知道在使用方法时我可以在其他数据类型之前使用“ref”或“out”,这样就会产生与示例相同的效果。但我的问题是,默认情况下哪些数据类型是引用类型?当我将另一种数据类型传递给方法并更改原始值时,我不想措手不及。

4

4 回答 4

12

但我的问题是,默认情况下哪些数据类型是引用类型?

任何定义为 a 的class都是引用类型,以及引用 ainterface或委托的变量,或声明的变量dynamic。有关详细信息,请参阅参考类型。您可以在方法中更改类的成员,而无需通过refor out。话虽如此,您不能更改引用本身- 因此变量在方法调用之后将始终指向与方法调用之前相同的实例,除非您通过outor传递它ref

如果它是 a struct,它将是一个值类型。

于 2012-08-17T16:41:44.653 回答
1

一个更好的问题是哪些类型不是引用类型。

MSDN 文档

  • 结构
  • 枚举

结构分为以下几类:

  • 数值类型:整数类型、浮点类型和小数
  • 布尔
  • 用户定义的结构
于 2012-08-17T16:47:25.273 回答
0

refout一样的是引用类型。事实上,它们的含义取决于您使用的类型。

Onvalue type ref关键字是一个参考,

Onreference type ref关键字是对引用的引用。

CLR默认情况下classesare reference types, ansstruct是 a value type

于 2012-08-17T16:42:58.373 回答
0

c# 中的所有内容都派生自Object.. 这就是为什么您会看到 atoString()和其他方法,即使是 int..

-->Value Types [占用存储它们所需的内存]

{也称为原始类型(十进制除外),因为它们由处理器直接支持}

->int,long,byte,flot,decimal...

->布尔

->字符

-->引用类型[需要为引用和对象单独分配内存]

->string

->object

-->通用类型参数

->T(示例:树示例)

-->指针类型

->标记为不安全代码

可以传递参数

->按(在值类型的情况下创建精确副本||仅在引用类型的情况下复制引用)

->by ref(指同一个对象)

-> by out(允许未初始化的数据作为参数传递 && 与 ref 相同)

重要事实

c# 中的参数是by default按值传递的

于 2012-08-17T16:49:07.213 回答