在C#中数据类型分为值类型和引用类型
值类型:结构体、枚举
引用类型:类、接口、数组、委托
在结构使用时,结构可以实现接口。这时就有一个问题“结构体实现接口后是值类型还是引用类型?”。带着这个问题,我们看下面这段代码。
- //结构体班级
- struct StructClass : IClass {
- public int Count;//人数
- public void AddStudent() {
- Count++;
- }
- public void ShowCount() {
- Console.WriteLine(Count);
- }
- }
- //接口
- interface IClass {
- void AddStudent();//添加学生
- void ShowCount();//显示学生人数
- }
- class Program {
- static void Main(string[] args) {
- StructClass s1 = new StructClass();
- StructClass s2 = s1;
- s1.AddStudent();
- s1.ShowCount(); //输出1
- s2.ShowCount(); //输出0
- //说明s2和s1不指向同一个对象,s2=s1是创建了一个s1的副本
- //这是值类型很显著的标志
- IClass ic1 = new StructClass();
- IClass ic2 = ic1;
- ic1.AddStudent();
- ic1.ShowCount();//输出1
- ic2.ShowCount();//输出1
- //说明s2和s1指向同一个对象,s2=s1是将s1的引用赋给s2
- //这是引用类型很显著的标志
- }
- }
最后得出结论:
当我们声明对象(s1、s2)是结构体类型时,对象是值类型,对象在栈中创建
当我们声明对象(ic1、ic2)是接口类型时,对象是引用类型,对象在堆中创建
本文通过代码示例详细解释了在C#中结构体与接口的类型区别,包括它们如何在栈与堆中创建以及如何实现接口。通过实例分析,清晰展示了这两种类型在内存管理上的特性。
 结构体实现接口后是值类型还是引用类型&spm=1001.2101.3001.5002&articleId=28889611&d=1&t=3&u=5cd3d9ff42344d37af3b96b943feb0ba)
2172

被折叠的 条评论
为什么被折叠?



