默认情况下哪些数据类型是引用类型?

时间:2012-08-17 16:39:59

标签: c#

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

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

4 个答案:

答案 0 :(得分:12)

  

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

任何定义为class的内容都是引用类型,引用interface或委托的变量或声明为dynamic的变量。有关详细信息,请参阅Reference Types。您可以在方法中更改类的成员,而无需经过refout。话虽这么说,你不能改变引用本身 - 所以变量总是指向方法调用之后的同一个实例,除非你通过out传递它或者ref

如果它是struct,则它将是值类型。

答案 1 :(得分:1)

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

MSDN documentation

  • 的Structs
  • 枚举

结构属于以下类别:

  • 数字类型:积分类型,浮点类型和小数
  • BOOL
  • 用户定义的结构

答案 2 :(得分:0)

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

value type ref关键字是参考,

点击reference type ref关键字是对参考的引用。

CLR每个默认classesreference types,而structvalue type

答案 3 :(得分:0)

c#中的所有内容都来自Object ..这就是为什么你看到一个toString()和其他方法,即使是int ..

- >值类型 [占用存储它们所需的内存]

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

  

- > INT,长,字节,海军报,十进制...

     

- > BOOL

     

- >炭

- >参考类型 [需要为参考和对象分别分配内存]

->string

->object

- >通用类型参数

  

- > T(例:TreeExample)

- >指针类型

  

- >标记为不安全代码

可以传递参数

  

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

     

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

     

- > by out (允许未初始化的数据作为参数&&和ref一样传递)

重要事实

c#中的

参数是by default按值传递