当前位置: 代码迷 >> C# >> 懂得C#引用类型
  详细解决方案

懂得C#引用类型

热度:417   发布时间:2016-05-05 02:54:19.0
理解C#引用类型

掉坑里了,因为对引用类型的理解不够深,导致了项目出现了Bug。

首先整理一下C#基础:引用类型赋值赋的是对象的指针,而值类型赋值是copy副本,这是引用类型和值类型的区别之一。

上代码:

 1  class Program 2     { 3         static void Main(string[] args) 4         { 5             var obj = MyClassA.PropertyA; 6             Console.WriteLine(string.Join(",", MyClassA.PropertyA.Foo)); 7             obj.Foo.RemoveAll(m => m == "e"); 8             Console.WriteLine(string.Join(",",MyClassA.PropertyA.Foo)); 9 10             Console.WriteLine(string.Join(",",MyClassA.PropertyA.Bar));11             obj.Bar = obj.Bar.Where(m => m > 2).ToList();12             Console.WriteLine(string.Join(",", MyClassA.PropertyA.Bar));13 14             obj.Foo = new List<string> {"x", "y", "z"};15             Console.WriteLine(string.Join(",", MyClassA.PropertyA.Foo));16 17             Console.Read();18         }19     }20     class MyClassA21     {22         static MyClassA()23         {24             PropertyA=new MyClassB();25             PropertyA.Foo = new List<string> { "a", "b", "c", "d","e"};26             PropertyA.Bar = new List<int> {1, 2, 3, 4, 5};27         }28         public static MyClassB PropertyA { get; private set; }29     }30 31     class MyClassB32     {33         public List<string> Foo { get; set; }34         public List<int> Bar { get; set; }35     }

不容易理解的是:我明明操作的是obj的内部成员,为什么连MyClassA.PropertyA的成员值也被改了?

因为,当MyClassA.PropertyA赋值给obj时,obj就指向了MyClassA(引用类型),所以后面只要是对obj成员的操作,其实就是在操作MyCalssA的内部成员。

 

  相关解决方案