[转] 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

浙公网安备 33010602011771号