关于C#中各种类型的默认访问级别
·
在 C# 中,不同类型的成员和类型本身具有不同的默认访问修饰符(即未显式指定时的访问级别)。以下是详细的分类说明:
1. 类型的默认访问级别
关于什么是类型,在另一篇文章C# 中的“类型“具体指什么?中已经解释过了,这里不再赘述
| 类型声明位置 | 默认访问修饰符 | 说明 |
|---|---|---|
| 命名空间内 | internal | 只能在当前程序集内访问 |
| 类/结构体内部 | private | 只能在外围类中访问(嵌套类型) |
namespace MyNamespace
{
class MyClass { } // 默认 internal
public class MyPublicClass { }
class Container
{
class NestedClass { } // 默认 private
}
}
2. 类/结构体成员的默认访问级别
| 成员类型 | 默认访问修饰符 | 说明 |
|---|---|---|
| 字段 | private | 仅当前类可访问 |
| 属性 | private | 自动实现的属性( { get; set; } )的访问器继承属性的访问级别 |
| 方法 | private | 包括普通方法、构造函数、析构函数 |
| 事件 | private | 委托类型的事件 |
| 嵌套类型 | private | 如果声明在类/结构体内部 |
class Example
{
int _field; // 默认 private
string Property { get; set; } // get/set 的访问级别与属性一致(此处为 private)
void Method() { } // 默认 private
event Action MyEvent; // 默认 private
}
3. 接口与枚举的默认访问级别
| 类型 | 默认访问修饰符 | 说明 |
|---|---|---|
| 接口成员 | public | 接口成员总是公开的,不能显式指定修饰符 |
| 枚举成员 | public | 枚举值默认为公开访问 |
interface IExample
{
void DoWork(); // 隐式 public,不能写修饰符
}
enum Color
{
Red, // 隐式 public
Green
}
4. 特殊情况
(1) 部分类的成员
-
如果类标记为 partial,每个部分的成员默认访问级别仍遵循上述规则。
(2) 记录(record)类型
-
C# 9+ 引入的 record或 record struct 的成员默认也是 private。
关键总结
-
类型:命名空间内默认为 internal,嵌套类型默认为 private。
-
成员:类/结构体的成员(字段、方法等)默认均为 private。
-
接口/枚举:成员隐式为 public,且不能显式指定修饰符。
-
最佳实践:显式声明访问级别(如 public/protected ),避免依赖默认行为。
如果需要更严格的封装,建议始终显式指定访问修饰符,以提高代码可读性。
更多推荐



所有评论(0)