前几日与同事讨论一个相对庞大的场景,,需要先将中间过程存储在List中,稍后再用。同时措施类的许多线程共用了一个全局变量。
具体来说就是如下代码
。。。 _order = order1; _list.Add(_order); 。。。 _order = order2; _list.Add(_order); 。。。 _order = order3; _list.Add(_order); 。。。 _list.ForEach(o => PrintContent(o)); 。。。
对付打印内容,到底是1、2、3差别内容呢,还是都是3的内容?大家定见不一。运行一下看当作果,固然是最简单的工作,这也不是最重要的。重要的是,玩儿C#这么多年,对付这么个简单的问题,我们都有本身的见解。
一边认为,既然都是将_order添加进去,而_order又在不停变革,最后必定是都是一样的内容。另一边认为,记录的应该是内存的实际指向,除非记录的位置明确被变动,否则不应该变革,不会随之中间变量的变革而变革。
事实证明,后者是正确的。发散一下,如果是布局体(虽然此刻已经用的很少了)的话,情况又有差别。。。如果在list添加进去一个布局体,然后对传入的中间变量进行变动,并不会反应的list对应的项上。
其实回头想想,这不就是我们初学面向东西语言时经常遇到的,对付一个函数形参的指针通报与值通报问题吗?