在C#中,我知道默认情况下,传递给函数的任何参数都是通过复制的,也就是说,在函数内,有一个参数的本地副本。但是,当一个对象作为参数传递给另一个类时该怎么办?
像下面这样的场景是通过引用传递还是通过值传递:
class MyClass {
private Object localObj;
public void SetObject(Object obj) {
localObj = obj;
}
}
void Main() {
Object someTestObj = new Object();
someTestObj.name = "My Name";
MyClass cls = New MyClass();
cls.SetObject(someTesetObj);
}
在这种情况下,类变量localObj
具有与someTestObj
创建于Main
司机等级?或者这两个变量会指向不同的对象实例吗?
“对象”永远不会在 C# 中传递——“对象”不是语言中的值。该语言中唯一的类型是原始类型、结构类型等,并且参考类型。没有“对象类型”。
类型Object
, MyClass
等是引用类型。它们的值是“引用”——指向对象的指针。对象只能通过引用来操作——当你这样做时new
在他们身上,你会得到一个参考,.
运算符对引用进行操作;等等。无法获取其值“是”对象的变量,因为没有对象类型。
所有类型(包括引用类型)都可以按值或按引用传递。如果参数具有类似关键字,则通过引用传递参数ref
or out
. The SetObject
方法obj
参数(引用类型)没有这样的关键字,所以它是按值传递-- 引用按值传递。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)