C#面试题更新 2026-08-03

在 C# 中,结构体(struct)是什么?请列举并解释结构体与类(class)之间的主要区别,包括值类型与引用类型的差异、继承行为、默认构造函数、赋值时的行为、以及使用场景选择。

考察说明

考查对 C# 结构体与类的核心区别的理解,包括值类型与引用类型的本质差异及其对赋值、内存分配和继承的影响。

回答思路

  1. 【回答框架 1】结构体是值类型,类行是引用类型。结构体在栈上分配,类在堆上分配。赋值时,结构体复制整个数据,类复制引用。
  2. 【回答框架 2】结构体不支持继承,不能从其他结构体或类继承,但可以实现接口;类支持单继承和多接口实现。
  3. 【回答框架 3】结构体不能定义无参构造函数,默认构造函数将所有字段初始化为默认值;类可以有显式无参构造函数。若自定义有参构造函数,必须为所有字段赋值。
  4. 【回答框架 4】结构体常用于表示轻量级、不可变或短生命周期的小型对象,如坐标点、颜色值;类适用于较复杂、需要多态或引用的场景。选择时考虑性能、语义和可变性。
  5. 【回答框架 5】注意结构体的装箱拆箱开销,频繁装箱会影响性能;在大量小对象和值语义场景下优先选择结构体,但需避免复制开销。
  6. 【关键点 1】结构体是值类型,类是引用类型,这是根本区别。
  7. 【关键点 2】结构体不支持继承,但可实现接口;类支持继承。
  8. 【关键点 3】结构体不能有显式无参构造函数,类可以有。
  9. 【关键点 4】结构体赋值复制全部数据,类赋值只复制引用。
  10. 【关键点 5】结构体适合轻量、短生命周期对象;类适合复杂、多态场景。
  11. 【易错点 1】将结构体用于大型或频繁修改的对象,会导致每次赋值和修改都产生复制开销。
  12. 【易错点 2】忽略结构体的装箱拆箱开销,在集合和泛型中可能造成性能下降。
  13. 【易错点 3】在结构体中定义无参构造函数是 C# 10 之前的限制,但之后版本支持,需注意版本差异。