当前位置:编程学习 > C#/ASP.NET >>

对于C#中b=a的N种情况分析

本文旨在验证一个容易混淆的概念,从而为玩转WPF/Silverlight中INotifyProperty做铺垫。

      两个相同类型的变量a和b,并且有如下关系: 

      b = a;

      如果a发生改变,b是否也发生改变呢?

      情况很复杂,分以下几种情况谈论:

      1) 单个实体

            1. 简单类型

            先考察int:

            int a = 1;
            int b = a;

            a = 2;
            Console.WriteLine("b: " + b);

            输出结果:

            clip_image002

            再考察一下string:

            string a = "1";
            string b = a;

            a = "2";
            Console.WriteLine("b: " + b);

            输出结果:

            clip_image002[1]

            如果不放心,还可以测试一下Enum,结果类似,详见Demo。

            结论:简单类型是组成复合类型的最基本单位,是原子,不可再拆分,所以不管是值类型double、int还是引用类型string,b都不随a的改变而改变,因为它们指向全局堆栈(对于string而言是托管堆)上的同一个地址。

            2. 复合类型

            复合类型是由string、int、double这些简单类型组成的。

            分别定义一个复合的引用类型(class)和一个复合的值类型(struct)。 

        class UserInfo
        {
            public string UserName;
            public int Age;
        }

        struct UserInfo2
        {
            public string UserName;
            public int Age;
        }


            先讨论引用类型: 

     
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,