首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2026 .NET 面试基础必背|string 与 StringBuilder/ref/out/ 值引用类型高频题

2026 .NET 面试基础必背|string 与 StringBuilder/ref/out/ 值引用类型高频题

作者头像
云中小生
发布2026-04-21 20:29:46
发布2026-04-21 20:29:46
890
举报

2026 .NET 面试基础必背|string 与 StringBuilder/ref/out/ 值引用类型高频题

前言

2026年.NET生态持续升温,.NET 10正式普及、Native AOT成为企业选型核心、AI集成云原生落地加速,面试考察重点也从基础语法转向「原理+实战+性能」三维考核。本文整理了2026年.NET/C#面试高频题(覆盖初级→中级→高级),每道题均包含「高频提问场景+标准答案+底层原理+避坑提示」,拒绝无效背诵,帮你吃透核心逻辑,从容应对面试。

2026 .NET生态趋势图
2026 .NET生态趋势图

2026 .NET生态趋势图

一、基础核心篇(初级必问,考察基本功)

核心考点:C#基础语法面向对象常用集合,是所有岗位的必考题,重点考察理解深度而非死记硬背。

1. 高频题: string 和 StringBuilder 的区别?什么场景下用 StringBuilder?

提问场景:初级开发面试必问,常结合字符串拼接性能问题追问。

标准答案:

  • string:不可变字符串类型,每次拼接、修改都会创建新的字符串对象,频繁操作会产生大量临时对象,增加GC负担,效率低。
  • StringBuilder:可变字符序列,内部维护一个可扩容的字符数组,拼接、修改操作不会创建新对象,仅在容量不足时扩容,效率远高于string
  • 适用场景: 循环内字符串拼接、需要多次修改字符串内容(如日志拼接、复杂字符串组装)的场景;若仅单次拼接或字符串固定,用string即可。

底层原理:string本质是char[]的只读封装,一旦创建不可修改,拼接时会新开辟内存空间复制原有内容+新增内容;StringBuilder默认初始容量为16,当长度超过当前容量时,自动扩容为原容量的2倍,扩容时会复制原有数据到新数组,因此建议提前设置预估容量,减少扩容开销。

string与StringBuilder底层原理对比图
string与StringBuilder底层原理对比图

string与StringBuilder底层原理对比图

避坑提示: 不要盲目用StringBuilder,单次拼接(如"a"+"b")时,编译器会自动优化为string.Concat,性能优于StringBuilder;仅当拼接次数≥3次(尤其循环内),才推荐用StringBuilder

2. 高频题: ref 和 out 关键字的区别?

提问场景: 基础语法追问,常结合「参数传递方式」考察。

标准答案:

  • 相同点:均实现「按引用传递参数」,方法内修改参数值会影响外部变量,避免值类型传递时的副本开销。
  • 不同点:
    • ref:要求参数在传递前必须初始化,方法内可修改也可不修改参数值;
    • out: 要求参数传递前无需初始化,但方法内必须给参数赋值(否则编译报错),适合「方法返回多个值」的场景。

底层原理:refout 均会将参数的内存地址传递给方法,方法操作的是原变量的内存空间;区别在于编译器对out的校验更严格,强制方法内赋值,确保外部使用时变量有有效值。

代码示例:

代码语言:javascript
复制
// ref 使用示例(参数必须初始化)
int num = 10;
RefMethod(ref num); // 输出:20
void RefMethod(ref int x)
{
    x = 20; // 可修改,也可不修改
}
// out 使用示例(参数无需初始化)
OutMethod(out int result); // 输出:30
void OutMethod(out int x)
{
    x = 30; // 必须赋值,否则编译失败
}
ref与out参数传递流程示意图
ref与out参数传递流程示意图

ref与out参数传递流程示意图

3. 高频题:C# 中值类型和引用类型的区别?分别包含哪些?

提问场景: 基础必问,常追问堆和栈的分配机制装箱拆箱

标准答案:

  • 值类型:直接存储数据本身,分配在栈上(栈内存自动释放,效率高),赋值时传递副本;
    • 基本类型(int、float、bool等)结构体(struct)枚举(enum)Nullable<T>
  • 引用类型:存储数据的引用(内存地址),数据本身分配在堆上,栈上仅存地址,赋值时传递引用(指向同一堆内存);
    • 类(class)接口(interface)委托(delegate)数组stringdynamic

底层原理: 栈是先进后出的内存区域,用于存储短期存在的变量(如方法内局部变量),方法执行完毕后栈帧自动释放;堆是动态分配的内存区域,用于存储长期存在的对象,由GC(垃圾回收器)负责回收。值类型在栈上分配,销毁快;引用类型在堆上分配,销毁依赖GC,存在内存开销。

值类型与引用类型堆栈分配示意图
值类型与引用类型堆栈分配示意图

值类型与引用类型堆栈分配示意图

避坑提示:string是引用类型,但具有「不可变性」,本质是char[]的只读封装,每次修改都会创建新对象,这点容易和值类型混淆;struct是值类型,但如果包含引用类型字段,字段本身仍存储在堆上。

附录

  • .NET面试题库:https://pan.baidu.com/s/1KrHSTQPPR58hPnoUaMhkvg?pwd=13yj
  • .NET知识库:https://pan.quark.cn/s/646377fabe79
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 .NET修仙日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2026 .NET 面试基础必背|string 与 StringBuilder/ref/out/ 值引用类型高频题
    • 前言
    • 一、基础核心篇(初级必问,考察基本功)
      • 1. 高频题: string 和 StringBuilder 的区别?什么场景下用 StringBuilder?
      • 2. 高频题: ref 和 out 关键字的区别?
      • 3. 高频题:C# 中值类型和引用类型的区别?分别包含哪些?
    • 附录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档