在 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。

关键总结

  1. 类型:命名空间内默认为 internal,嵌套类型默认为 private。

  2. 成员:类/结构体的成员(字段、方法等)默认均为 private。

  3. 接口/枚举:成员隐式为 public,且不能显式指定修饰符。

  4. 最佳实践:显式声明访问级别(如 public/protected ),避免依赖默认行为。

如果需要更严格的封装,建议始终显式指定访问修饰符,以提高代码可读性。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐