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

请解释 C# 中的访问修饰符,并说明 public、private、protected、internal 以及 protected internal 这些修饰符之间有何不同?

技术原理C#

考察说明

考查对 C# 访问修饰符的理解,以及成员可见性控制的基本概念。

回答思路

  1. 【回答框架 1】访问修饰符用于控制类型成员的可见性和可访问范围。C# 中主要有五种:public 成员访问不受限制;private 成员只能在包含它的类或结构体内访问。
  2. 【回答框架 2】protected 成员可以在同一类、派生类(包括其他程序集)中访问,但派生类的实例不能通过基类实例访问;internal 成员可以在同一程序集内访问,常用于使内部组件对其他类型可见。
  3. 【回答框架 3】protected internal 是 protected 和 internal 的结合,意味着成员可以在同一程序集内的任何地方访问,或者在派生类中访问(即使不同程序集),但需注意派生类只能通过派生类型的实例访问。
  4. 【回答框架 4】还有 private protected(C# 7.2 引入),它限定为同一程序集内且是派生类,这里不要求过多展开。
  5. 【回答框架 5】选择修饰符应基于封装原则:默认使用 private,需要子类访问用 protected,需要同一程序集内访问用 internal,公开 API 才用 public。
  6. 【关键点 1】public 访问不受限制,private 仅作用于当前类型。
  7. 【关键点 2】protected 允许派生类访问,但只能通过派生类型的实例。
  8. 【关键点 3】internal 限制在同一程序集,protected internal 是两者的并集。
  9. 【关键点 4】默认访问级别为 private。
  10. 【关键点 5】访问修饰符用于控制封装,不应滥用以保证代码安全。
  11. 【易错点 1】注意 protected internal 不是 protected 且 internal,而是两者的或(并集)。
  12. 【易错点 2】protected 访问在某些情况下可能被误以为所有派生类都能访问,但需考虑实例类型。