C#将指向引用类型的变量分配给另一个变量,后一个变量中存储了什么?

C#将指向引用类型的变量分配给另一个变量,后一个变量中存储了什么?,c#,types,parameter-passing,pass-by-reference,C#,Types,Parameter Passing,Pass By Reference,我试图理解当将一个变量a分配给一个新变量b时会发生什么,该变量已经存储了对对象实例MyClass的引用。 例如 我以为b中存储的值应该是a的地址,它是2,但当我输出b的值时,结果实际上是1。 e、 g 输出是 NEW NAME //a.Name some name //b.Name 我希望这两个变量的名称都会更改,因为我认为b正在存储指向a的指针。但是似乎b存储的是a的值,而不是它的地址 提前感谢(作者试图用指针的术语来解释,但是,这似乎有太复杂的事情) 调用setName(ref a,

我试图理解当将一个变量
a
分配给一个新变量
b
时会发生什么,该变量已经存储了对对象实例
MyClass
的引用。 例如

我以为
b
中存储的值应该是
a
的地址,它是2,但当我输出
b
的值时,结果实际上是1。 e、 g

输出是

NEW NAME   //a.Name
some name  //b.Name
我希望这两个变量的名称都会更改,因为我认为
b
正在存储指向
a
的指针。但是似乎
b
存储的是
a
的值,而不是它的地址

提前感谢

(作者试图用指针的术语来解释,但是,这似乎有太复杂的事情)

调用
setName(ref a,“NEW NAME”)
在功能上等同于将
setName()的主体内联到
实例
中,替换为
a

var a=newmyclass(“某个名称”);
var b=a;
a=新MyClass(“新名称”);
Console.WriteLine(a.Name);
Console.WriteLine(b.Name);

现在很清楚,在这种情况下,
b.Name
的值没有理由改变。添加函数
setName()
,其中
a
通过引用传递,对
b

的结果没有影响,谢谢您的回复,所以。。。当将
a
分配给
b
时,我们将
a
的值分配给
b
而不是
a
的内存位置/引用?我的意思是,结果也表明了这一点,但我无法找到这种行为发生的原因,因为我假设
a
仍然是引用类型的变量。可能是我阅读文档时的疏忽。@ChenL不,您不是在复制数据,而是在将
a
分配给
b
时复制了地址。如果“复制地址”是指将
a
的地址复制到
b
的值,那么,由于
b
存储
a
的地址,对
a
的值的更改是否也应该更改
b
的值?对不起,这有点让人困惑。@ChenL我知道这很让人困惑。您必须将地址本身视为其自身的价值。一旦你接受了这一点,那么就更容易理解为什么
b
的地址不改变,而
a
的地址改变了。哦,所以
b
a
的原始地址共享相同的内存地址。现在说得通了。我以为
b
会有不同的内存地址,只保存
a
的内存地址,谢谢@Patrick Roberts。
    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