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