[转] C# 中结构体实现接口后是值类型还是引用类型

值类型: 结构体、枚举
引用类型:类、接口、数组、委托

在结构使用时,结构可以实现接口。这时就有一个问题“结构体实现接口后是值类型还是引用类型?”。带着这个问题,我们看下面这段代码。

 1 //结构体班级    
 2 struct StructClass : IClass {    
 3     public int Count;//人数    
 4     public void AddStudent() {    
 5         Count++;    
 6     }    
 7    
 8     public void ShowCount() {    
 9         Console.WriteLine(Count);    
10     }    
11    
12 }    
13 //接口    
14 interface IClass {    
15     void AddStudent();//添加学生    
16     void ShowCount();//显示学生人数    
17 }    
18 class Program {    
19     static void Main(string[] args) {    
20         StructClass s1 = new StructClass();    
21         StructClass s2 = s1;    
22         s1.AddStudent();    
23         s1.ShowCount(); //输出1    
24         s2.ShowCount(); //输出0    
25         //说明s2和s1不指向同一个对象,s2=s1是创建了一个s1的副本    
26         //这是值类型很显著的标志    
27    
28         IClass ic1 = new StructClass();    
29         IClass ic2 = ic1;    
30         ic1.AddStudent();    
31         ic1.ShowCount();//输出1    
32         ic2.ShowCount();//输出1    
33         //说明s2和s1指向同一个对象,s2=s1是将s1的引用赋给s2    
34         //这是引用类型很显著的标志    
35     }    
36 }   

最后得出结论:
当我们声明对象(s1、s2)是结构体类型时,对象是值类型,对象在栈中创建
当我们声明对象(ic1、ic2)是接口类型时,对象是引用类型,对象在堆中创建

[原文链接] 

http://blog.csdn.net/qing2005/article/details/6492906

posted @ 2014-07-22 15:22  壬子木  阅读(568)  评论(0)    收藏  举报