C# 五大访问修饰符
一、五大访问修饰符总览C# 权限从小到大排序private → protected → internal → protected internal → public测试类统一字段所有规则基于以下字段验证public class People { public int a 10; // 公共 private int b 20; // 私有 protected int c 30; // 受保护 protected internal int d 30; // 受保护内部 internal int e 30; // 内部 }二、逐修饰符权限详解同项目 跨项目1. private 私有的权限最小核心规则仅当前类内部可以访问其余全部禁止当前类内部✅ 可访问本项目子类❌ 不可访问本项目外部实例❌ 不可访问跨项目任何场景❌ 不可访问2. protected 受保护的核心规则只给自己和子类用外部实例无权访问当前类内部✅ 可访问本项目子类✅ 可访问本项目外部实例❌ 不可访问跨项目子类✅ 可访问跨项目外部实例❌ 不可访问3. internal 内部的项目级权限核心规则仅限当前整个项目内部使用跨项目彻底失效当前类内部✅ 可访问本项目子类✅ 可访问本项目外部实例✅ 可访问跨项目子类❌ 不可访问跨项目外部实例❌ 不可访问4. protected internal 受保护内部合并权限核心规则取 protected 和 internal 的并集满足其一即可访问当前类内部✅ 可访问本项目子类✅ 可访问本项目外部实例✅ 可访问跨项目子类✅ 可访问继承权限生效跨项目外部实例❌ 不可访问5. public 公共的权限最大核心规则全场景无限制任何地方都能访问当前类内部✅ 可访问本项目子类✅ 可访问本项目外部实例✅ 可访问跨项目子类✅ 可访问跨项目外部实例✅ 可访问三、代码场景验证对应你的源码1. 本项目类内部People 内部方法 F1所有修饰符成员全部可以访问public void F1() { Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); Console.WriteLine(d); Console.WriteLine(e); }2. 本项目子类Man 类唯独 private 不可访问public void F2() { Console.WriteLine(a); //public ✅ // Console.WriteLine(b); //private ❌ Console.WriteLine(c); //protected ✅ Console.WriteLine(d); //protected internal ✅ Console.WriteLine(e); //internal ✅ }3. 本项目外部实例Main 方法实例调用private、protected 禁止实例访问People p new People(); Console.WriteLine(p.a); //public ✅ //Console.WriteLine(p.b) //private ❌ //Console.WriteLine(p.c) //protected ❌ Console.WriteLine(p.d); //protected internal ✅ Console.WriteLine(p.e); //internal ✅4. 跨项目场景子类 Woman 外部实例跨项目彻底截断 internal仅保留 public、protected、protected internal 的子类权限// 跨项目子类 public class Woman : People { public void F3() { Console.WriteLine(a); //public ✅ Console.WriteLine(c); //protected ✅ Console.WriteLine(d); //protected internal ✅ // Console.WriteLine(e); //internal 跨项目 ❌ } } // 跨项目实例调用 People p new People(); Console.WriteLine(p.a); //public ✅ //其余所有成员 全部不可访问四、五大修饰符终极汇总表背诵神器修饰符本类内部本项目子类本项目实例跨项目子类跨项目实例private✅❌❌❌❌protected✅✅❌✅❌internal✅✅✅❌❌protected internal✅✅✅✅❌public✅✅✅✅✅五、满分必考口诀private私有最自闭只在本类能看见protected护子类实例外部看不见internal锁项目跨项目就作废protected internal双权限子类/本项目随便用public全开放走遍项目都能用