欢迎光临南昌笑劳网络科技有限公司,我们是一家专注中小型企业营销推广服务的公司!

咨询热线:400 76543 55
南昌笑劳网络科技有限公司
最新资讯News
南昌笑劳网络科技有限公司

C#中的结构体(struct)和类(class)有什么区别 C# struct与class的选择

作者:月夜之吻 | 点击: | 来源:月夜之吻
0511
2025
struct是值类型,赋值复制数据,适合小对象;class是引用类型,赋值复制引用,支持继承多态,适用于复杂对象。...
struct是值类型,赋值复制数据,适合小对象;class是引用类型,赋值复制引用,支持继承多态,适用于复杂对象。

在C#中,structclass 都是用来封装数据和行为的类型,但它们在本质上有重要区别,直接影响性能、内存使用和编程逻辑。选择哪一个,取决于具体场景。

1. 值类型 vs 引用类型

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 指向同一个对象

2. 内存分配与性能

struct 分配在栈上(局部变量)或内联在对象中,避免了堆分配和垃圾回收开销,适合小数据结构。

  • 频繁创建和销毁的小对象使用 struct 可减少 GC 压力。
  • 但如果 struct 较大,复制成本高,反而影响性能。

class 分配在堆上,由 GC 管理,适用于生命周期长或需要共享的对象。

3. 继承与多态支持

class 支持继承和多态,可以派生子类,重写虚方法。

  • struct 不能被继承,也不能声明为 abstract 或 sealed(隐式 sealed)。
  • struct 只能实现接口,但不能有虚方法或重写机制。

如果你需要面向对象设计中的继承体系,必须使用 class。

4. 默认构造函数与字段初始化

struct 不能声明无参构造函数,编译器自动提供一个默认构造函数,将所有字段初始化为默认值。

  • 你可以定义带参数的构造函数,但不能省略字段赋值。
  • class 可以自定义无参构造函数,并控制初始化逻辑。

另外,struct 中的字段不能在声明时直接赋值(除非是 const 或 static),而 class 可以。

5. null 值与可空性

struct 是值类型,不能为 null(除非使用 Nullable 或 ? 语法)。

  • class 类型的变量天然可以为 null。
  • 如果需要表示“无值”状态,class 更自然,但 struct 也可通过 int? 这样的方式支持。

何时选择 struct,何时选择 class?

微软建议:如果满足以下所有条件,考虑使用 struct:

  • 实例较小且生命周期短。
  • 逻辑上代表一个简单的数据结构(如坐标、颜色、矩形)。
  • 不会被频繁修改或传递(避免复制开销)。
  • 不需要继承或多态。
  • 不常装箱(boxing)到 object 或接口。

常见 struct 示例:int、double、DateTime、System.Numerics.Vector3、自定义的 Size、Color 等。

大多数业务对象、服务、控制器、复杂状态管理都应使用 class。

基本上就这些。关键不是语法差异,而是语义和性能权衡。用对了提升效率,用错了可能引发隐藏 bug 或性能问题。


#   # 接口  #   # class  # 值类型  # 引用类型  # Nullable  # Struct  # 对象  # bug  # 适用于  # 重写  # 象中  # 的是  # 都是  # 这是  # 如果你  # 继承  # 数据结构  # 微软  # 区别  # c#  # Static  # Object  # NULL  # 面向对象  # 封装  # 多态  # 子类  # 构造函数  # const  # 局部变量  # 结构体  # int  # double  # 你可以 

我要咨询做网站
成功案例
建站流程
  • 网站需
    求分析
  • 网站策
    划方案
  • 页面风
    格设计
  • 程序设
    计研发
  • 资料录
    入优化
  • 确认交
    付使用
  • 后续跟
    踪服务
  • 400 76543 55
    sale#ncxiaolao.cn
Hi,Are you ready?
准备好开始了吗?
那就与我们取得联系吧

咨询送礼现在提交,将获得笑劳科技策划专家免费为您制作
价值5880元《全网营销方案+优化视频教程》一份!
下单送礼感恩七周年,新老用户下单即送创业型空间+域名等大礼
24小时免费咨询热线400 76543 55
合作意向表
您需要的服务
您最关注的地方
预算

直接咨询