C#9、默认访问修饰符
✅ 1. 顶层类型(类、结构、接口、枚举、委托)
指直接定义在命名空间下的类型(不是嵌套在其他类里的)
- 默认是:
internal - 含义:仅限当前程序集(项目)内可见
示例:
// 没有写 public 或 internal,默认就是 internal
class MyClass
{// ...
}struct MyStruct { }
interface IMyInterface { }
enum MyEnum { A, B }
🔔 注意:如果想让其他项目引用并使用这个类,必须显式加上
public。
✅ 2. 类或结构的成员(字段、方法、属性、构造函数等)
指定义在类或结构内部的成员
- 默认是:
private - 含义:只能在当前类/结构内部访问
示例:
public class Person
{string name; // 默认 privatevoid SayHello() // 默认 private{Console.WriteLine("Hello");}public void PublicMethod(){name = "Alice"; // ✅ 类内部可以访问 private 成员SayHello(); // ✅}
}
💡 这是 C# 强调“封装性”的体现:成员默认对外隐藏,需要时才开放(如用
public)。
✅ 3. 接口成员(C# 8.0 之前 vs 之后)
- C# 8.0 之前:接口成员不能有访问修饰符,默认都是
public(且不能写public)。 - C# 8.0+:支持默认接口方法,此时接口成员默认仍是
public,但可以显式指定为private、protected等(较少用)。
示例(现代 C#):
interface ILogger
{void Log(string msg); // 隐式 publicpublic void Flush() { } // 显式 public(C# 8+)private void Helper() { } // 私有辅助方法(C# 8+)
}
⚠️ 但通常我们只关心:接口成员对外都是公开的。
✅ 4. 嵌套类型(定义在类里面的类/结构)
- 默认是:
private
示例:
public class Outer
{class NestedClass // 默认 private{// 只有 Outer 类内部能访问 NestedClass}
}
📌 快速记忆表
| 定义位置 | 默认访问修饰符 |
|---|---|
| 命名空间下的类、结构、接口、枚举、委托 | internal |
| 类或结构中的成员(方法、字段、属性等) | private |
| 接口中的成员 | public |
| 嵌套在类中的类型(如内部类) | private |
💡 初学者建议:
- 写类时,如果希望被其他项目使用 → 加
public - 写成员时,如果希望被外部调用 → 加
public - 不确定时,先保持默认(
private或internal),按需提升权限
问题
类的默认访问修饰符是什么?
在命名空间级别,默认访问修饰符是internal,对于嵌套类是private.
