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全开放,走遍项目都能用
