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