C# 将一个指向引用类型的变量赋值给另一个变量,后一个变量中存储的是什么?
C# Assigning a variable pointing to a reference type to another variable, what is stored in the latter variable?
我想了解将已经存储了对对象实例 MyClass
的引用的变量 a
分配给新变量 b
时会发生什么。
例如
var a = new MyClass("some name");
//assume instance has an address 1, var a's address is 2 and the value is the address of object instance(1).
var b = a;
我以为b
中存储的值是a
的地址,也就是2,结果输出b
的值时,结果好像是1。
例如
setName(ref a, "NEW NAME");
public void setName (ref MyClass instance, string name)
{
instance = new MyClass(name)
}
Console.WriteLine(a.Name);
Console.WriteLine(b.Name);
输出为
NEW NAME //a.Name
some name //b.Name
我原以为两个变量的名称都会更改,因为我认为 b
正在存储指向 a
的指针。但似乎 b
正在存储 a
的值而不是它的地址?
提前致谢
(original answer试图用指针的术语来解释,然而,这似乎过于复杂了)
调用 setName(ref a, "NEW NAME")
在功能上等同于内联 setName()
的主体,其中 instance
替换为 a
:
var a = new MyClass("some name");
var b = a;
a = new MyClass("NEW NAME");
Console.WriteLine(a.Name);
Console.WriteLine(b.Name);
现在很清楚 b.Name
的值在这种情况下没有理由改变。添加函数 setName()
其中 a
通过引用传递对 b
.
的结果没有影响
我想了解将已经存储了对对象实例 MyClass
的引用的变量 a
分配给新变量 b
时会发生什么。
例如
var a = new MyClass("some name");
//assume instance has an address 1, var a's address is 2 and the value is the address of object instance(1).
var b = a;
我以为b
中存储的值是a
的地址,也就是2,结果输出b
的值时,结果好像是1。
例如
setName(ref a, "NEW NAME");
public void setName (ref MyClass instance, string name)
{
instance = new MyClass(name)
}
Console.WriteLine(a.Name);
Console.WriteLine(b.Name);
输出为
NEW NAME //a.Name
some name //b.Name
我原以为两个变量的名称都会更改,因为我认为 b
正在存储指向 a
的指针。但似乎 b
正在存储 a
的值而不是它的地址?
提前致谢
(original answer试图用指针的术语来解释,然而,这似乎过于复杂了)
调用 setName(ref a, "NEW NAME")
在功能上等同于内联 setName()
的主体,其中 instance
替换为 a
:
var a = new MyClass("some name");
var b = a;
a = new MyClass("NEW NAME");
Console.WriteLine(a.Name);
Console.WriteLine(b.Name);
现在很清楚 b.Name
的值在这种情况下没有理由改变。添加函数 setName()
其中 a
通过引用传递对 b
.