struct是值类型,赋值复制数据,适合小对象;class是引用类型,赋值复制引用,支持继承多态,适用于复杂对象。

在C#中,struct 和 class 都是用来封装数据和行为的类型,但它们在本质上有重要区别,直接影响性能、内存使用和编程逻辑。选择哪一个,取决于具体场景。
struct 是值类型,而 class 是引用类型,这是最根本的区别。
例如:
struct PointStruct { public int X, Y; }
class PointClass { public int X, Y; }
var s1 = new PointStruct { X = 1 };
var s2 = s1;
s2.X = 2;
// s1.X 仍是 1
var c1 = new PointClass { X = 1 };
var c2 = c1;
c2.X = 2;
// c1.X 变成 2,因为 c1 和 c2 指向同一个对象
struct 分配在栈上(局部变量)或内联在对象中,避免了堆分配和垃圾回收开销,适合小数据结构。
class 分配在堆上,由 GC 管理,适用于生命周期长或需要共享的对象。
class 支持继承和多态,可以派生子类,重写虚方法。
如果你需要面向对象设计中的继承体系,必须使用 class。
struct 不能声明无参构造函数,编译器自动提供一个默认构造函数,将所有字段初始化为默认值。
另外,struct 中的字段不能在声明时直接赋值(除非是 const 或 static),而 class 可以。
struct 是值类型,不能为 null(除非使用 Nullable<T> 或 ? 语法)。
微软建议:如果满足以下所有条件,考虑使用 struct:
常见 struct 示例:int、double、DateTime、System.Numerics.Vector3、自定义的 Size、Color 等。
大多数业务对象、服务、控制器、复杂状态管理都应使用 class。
基本上就这些。关键不是语法差异,而是语义和性能权衡。用对了提升效率,用错了可能引发隐藏 bug 或性能问题。
以上就是C#中的结构体(struct)和类(class)有什么区别 C# struct与class的选择的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号