编辑
2023-04-01
编程语言
00

C# 结构体(struct)与类(class)的区别

在 C# 中,结构体(struct)类(class) 都可以用来定义数据结构,但它们在内存分配、继承、可变性等方面存在明显区别。


1. 主要区别

区别点结构体(struct)类(class)
类型值类型(Value Type)引用类型(Reference Type)
内存分配分配在**栈(Stack)**上(如果是局部变量)分配在**堆(Heap)**上(使用 new 创建)
默认访问修饰符public,结构体成员不能声明为Protectedprivate
赋值方式值拷贝(赋值时创建副本)引用拷贝(赋值时复制引用,多个引用指向同一对象)
继承不支持继承(不能被其他 struct 继承)支持继承(可以继承自其他 class
接口可以实现接口可以实现接口
构造函数不能显式的定义无参构造函数可以定义无参构造函数
析构函数不支持析构函数支持析构函数(由 GC 管理,~ClassName()
适用场景小型数据对象(如 Vector3Color复杂对象、需要共享引用的对象

编辑
2023-04-01
编程语言
00

1. 定义方式

  • 抽象类:使用 abstract 关键字定义,不能被实例化,通常包含普通方法(有实现)和抽象方法(无实现)。
  • 接口:使用 interface 关键字定义,默认所有方法都是 public 且没有实现(C# 8.0 及以上支持默认实现)。
编辑
2023-04-01
编程语言
00
编辑
2023-03-28
编程语言
00

概念

  • 装箱:值转引用,把值类型用引用类型存储,栈内存上的数据会迁移到堆内存中,并返回一个对该对象的引用。
  • 拆箱:引用转值,把引用类型存储的值还原为值类型,堆内存会迁移到栈,可能还会进行类型转换。

在不确定类型时使用装箱拆箱,可以方便我们进行参数的存储和传递

编辑
2023-03-28
编程语言
00

概念

partial 关键字允许 将一个类、结构体或接口的定义拆分到多个文件中,在编译时,它们会被合并为一个完整的类型。