日期:2014-05-17  浏览次数:20725 次

关于引用传递的疑惑

    class Program
    {
        private static void Main(string[] args)
        {
            var obj = new RefObject();
            obj.Flag = "csharp";
            var newobj = obj;
            obj = null;
            Console.WriteLine(newobj.Flag);
            Console.ReadLine();
        }
    }

    public class RefObject
    {
        public string Flag { get; set; }
    }


代码如上,当“obj = null”后,为什么newobj依然可以使用,我以前一直认为引用传递会导致这样的引用链全部为null了。
------解决方案--------------------
null给引用对象赋值,引用对象将从指向原地址改为指向空地址,这对原地址内的数据没有任何影响啊。
------解决方案--------------------
在c#中所有的赋,真的是赋。。。

var newobj = obj;

这句话真正该理解成 将obj的栈中的数据拷贝一份到newobj中。

对于引用类型所赋的值实际上是栈中保存的一个内存地址
对于值类型所赋的值,是栈中保存的实际值