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

在C#编程中,unsafe代码块的作用是什么?请说明如何启用和使用指针,并指出哪些情况下需要采用这种非安全上下文。

考察说明

考查对C#不安全代码及指针使用的理解,包括启用条件和实际应用。

回答思路

  1. 【回答框架 1】C#默认运行在托管环境,但通过unsafe代码块可在受控范围内使用指针。启用时需在项目配置中允许不安全代码,并用unsafe关键字标记代码块或方法。
  2. 【回答框架 2】指针操作仅限于值类型、数组元素或字段等,不能指向托管堆中的引用对象。常见用法包括高性能算法、与本地代码互操作或处理非托管内存。
  3. 【回答框架 3】使用指针必须注意固定内存,常用fixed语句防止对象被垃圾回收器移动。指针不提供安全防护,访问越界或错误类型转换可能导致程序崩溃或内存损坏。
  4. 【回答框架 4】应优先考虑其他安全机制,如Span<T>或Marshal类,仅在性能或兼容性必要时采用unsafe。
  5. 【关键点 1】unsafe代码块需在编译时启用AllowUnsafeBlocks选项。
  6. 【关键点 2】指针只能用于值类型,且不能指向可移动对象。
  7. 【关键点 3】fixed语句用于固定变量地址,确保GC期间不被移动。
  8. 【关键点 4】不安全代码易产生内存访问错误,需谨慎使用。
  9. 【易错点 1】误认为unsafe代码可随意访问托管对象,实际必须固定或转换。
  10. 【易错点 2】忽略fixed语句导致GC移动对象引发悬空指针。
  11. 【易错点 3】将指针用于引用类型导致编译错误。