因此,当我测试使用DataRow
参数创建的方法时,我发送了一个参数并在方法内修改了它。在那之后,我原来的DataRow
改为最终在该方法之后的任何内容。我意识到这是因为DataRow
是一个“引用类型”,这对我来说是新的。
我现在知道在使用方法时我可以在其他数据类型之前使用“ref”或“out”,这样就会发生与DataRow
示例相同的效果。但我的问题是,默认情况下哪些数据类型是引用类型?当我将另一种数据类型传递给方法并使原始值发生变化时,我不想措手不及。
答案 0 :(得分:12)
但我的问题是,默认情况下哪些数据类型是引用类型?
任何定义为class
的内容都是引用类型,引用interface
或委托的变量或声明为dynamic
的变量。有关详细信息,请参阅Reference Types。您可以在方法中更改类的成员,而无需经过ref
或out
。话虽这么说,你不能改变引用本身 - 所以变量总是指向方法调用之后的同一个实例,除非你通过out
传递它或者ref
。
如果它是struct
,则它将是值类型。
答案 1 :(得分:1)
答案 2 :(得分:0)
ref
和out
不同样是引用类型。事实上,它们的含义取决于您使用的类型。
在value type
ref
关键字是参考,
点击reference type
ref
关键字是对参考的引用。
CLR
每个默认classes
为reference types
,而struct
为value type
。
答案 3 :(得分:0)
c#中的所有内容都来自Object
..这就是为什么你看到一个toString()
和其他方法,即使是int ..
- >值类型 [占用存储它们所需的内存]
{也称为原始类型(十进制除外),因为它们直接受处理器支持}
- > INT,长,字节,海军报,十进制...
- > BOOL
- >炭
- >参考类型 [需要为参考和对象分别分配内存]
->string
->object
- >通用类型参数
- > T(例:TreeExample)
- >指针类型
- >标记为不安全代码
可以传递参数
- >通过值(在值类型的情况下创建精确副本||仅在引用类型的情况下复制引用)
- > by ref (指同一个对象)
- > by out (允许未初始化的数据作为参数&&和ref一样传递)
重要事实
c#中的 参数是by default
按值传递