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