C# 关于参考类型的问题

C# 关于参考类型的问题,c#,reference,C#,Reference,这是来自Jon Skeet的优秀个人网站(): 1) 更改第一个的值不会更改第二个的值- 2) 尽管它们的值仍然是对同一对象的引用,但通过第一个变量对对象所做的任何更改都将通过第二个变量可见 这句话取自同一句话。更改值意味着什么?我假设一个变量的值(例如int x=4,或5,或45,等等) 这是否意味着如果第一个指向另一个兼容对象,它不会对两个对象产生影响 那个页上的一切都有道理,我想这只是我对英语的理解问题 感谢对象本身的值与对象内容之间的差异不清楚 例如,可以通过调用first上的方法来更改

这是来自Jon Skeet的优秀个人网站():

1) 更改第一个的值不会更改第二个的值-

2) 尽管它们的值仍然是对同一对象的引用,但通过第一个变量对对象所做的任何更改都将通过第二个变量可见

这句话取自同一句话。更改值意味着什么?我假设一个变量的值(例如int x=4,或5,或45,等等)

这是否意味着如果第一个指向另一个兼容对象,它不会对两个对象产生影响

那个页上的一切都有道理,我想这只是我对英语的理解问题


感谢

对象本身的值与对象内容之间的差异不清楚

例如,可以通过调用first上的方法来更改second的内容,如示例中的Append调用。但是,将first的值设置为null并不会将second设置为null


通过编写此代码并在调试器中单步执行,您可以很容易地看到这一点。

首先
是对类型为
StringBuilder
的对象的引用。也就是说,
first
存储一个值,该值可用于引用堆上类型为
Stringuilder
的对象
second
是对类型为
StringBuilder
的对象的另一个引用,其值最初设置为引用与
first
所引用的对象相同的对象

如果您首先更改
的值
,您所做的就是更改引用对象的内容。也就是说,您首先使用
来引用不同的对象。这不会影响
;其值不受
first
值更改的影响。(请记住:
first
second
的值是最初具有相同referent的引用

int x = 1;
int y = x;
x = 2;
不更改
y
的值,更改
first
的值不更改
second
的值

另一方面,当
first
second
引用同一对象时,对该对象的任何更改都将通过
first
second
可见

假设我创建了一个文本文件
first.html
,它的内容是

<a href="http://stackoverflow.com">Stack Overflow</a>
这样我就不能再使用
first.html
来引用堆栈溢出主页。而且,此更改不会影响
second.html
的值。它仍然是

<a href="http://stackoverflow.com>Stack Overflow</a>


认为这些文件的内容是引用类型的值,而最终的缩写作为参照对象。

我明白。“值”将意味着它的状态——例如NULL,如果第一个设置为,则不影响第二个。但是,第一个内容确实影响第二个。我认为引用“状态”是不明智的。以这种方式,对象的状态包含在对象本身中,因此对这种状态的更改可以通过所有引用看到。您以后可能会混淆自己或他人。
<a href="http://www.thedailywtf.com>The Daily WTF</a>
<a href="http://stackoverflow.com>Stack Overflow</a>