码迷,mamicode.com
首页 > Windows程序 > 详细

理解C#引用类型

时间:2015-09-17 22:55:32      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:

掉坑里了,因为对引用类型的理解不够深,导致了项目出现了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 MyClassA
21     {
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 MyClassB
32     {
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的内部成员。

 

理解C#引用类型

标签:

原文地址:http://www.cnblogs.com/wukaixian/p/4817691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!