一文搞懂C#中类成员的可访问性
公众号「DotNet学习交流」,分享学习DotNet的点滴。
1、成员访问修饰符
在C#中类成员访问修饰符一共有5个,分别是public、private、protected、internal、protected internal。
类B能否访问一个类A的成员,取决于类B的两个特征:
1、类B是否派生自类A
2、类B和类A是否在同一程序集
2、成员的可访问性
准备
在第一个命名空间ClassMemberAccessibility_Demo中定义一个类ClassA,ClassA有5个属性分别被public、private、protected、internal、protected internal访问修饰符修饰,定义一个ClassB,再定义一个ClassC继承自ClassA,如下所示:
namespace ClassMemberAccessibility_Demo
{
public class ClassA
{
public int Member1 { get; set; }
private int Member2 { get; set; }
protected int Member3 { get; set; }
internal int Member4 { get; set; }
protected internal int Member5 { get; set; }
}
public class ClassB
{
}
public class ClassC : ClassA
{
}
internal class Program
{
static void Main(string[] args)
{
}
}
}
在第二个命名空间中添加对第一个命名空间的引用,然后在第二个命名空间,定义类ClassD,再定义一个ClassE,ClassE继承自ClassA,如下所示:
using ClassMemberAccessibility_Demo;
namespace ClassMemberAccessibility_Demo2
{
public class ClassD
{
}
public class ClassE : ClassA
{
}
internal class Program
{
static void Main(string[] args)
{
}
}
}
在同一程序集但不继承ClassA
ClassB与ClassA在同一程序集,但是不继承自ClassA,ClassA类成员对ClassB的可见性如下所示:
在ClassB内可访问Member1、Member4、Member5,修饰符分别是public、internal、protected internal。
在同一程序集且继承自ClassA
ClassC与ClassA在同一程序集,并且继承自ClassA,ClassA类成员对ClassC的可见性如下所示:
创建一个ClassC实例,可访问Member1、Member3、Member4、Member5,修饰符分别是public、protected、internal、protected internal。
不在同一程序集且不继承自ClassA
在ClassD内只能访问由public修饰的Member1。
不在同一程序集,但是继承自ClassA
可访问Member1、Member3、Member5,分别由public、protected、protected internal。
3、总结
5个修饰符的含义总结如下:
修饰符 | 含义 |
---|---|
public | 对任何类可访问 |
private | 只在类的内部可访问 |
protected | 对所有继承该类的类可访问 |
internal | 对该程序集内所有类可访问 |
protected internal | 对所有继承该类或在该程序集内声明的类可访问 |
要注意protected internal是protected和internal的并集而不是交集!!!
5个修饰符的可访问级别如下:
成员可访问性的总结如下:
同一程序集非派生 | 同一程序集派生 | |
---|---|---|
public | 🎉 | 🎉 |
private | ||
protected | 🎉 | |
internal | 🎉 | 🎉 |
protected internal | 🎉 | 🎉 |
不同程序集非派生 | 不同程序集派生 | |
---|---|---|
public | 🎉 | 🎉 |
private | ||
protected | 🎉 | |
internal | ||
protected internal | 🎉 |
🎉表示可访问
参考
《C#图解教程(第4版)》——Daniel M. Solis
摘要
C#中类成员的访问修饰符有public、private、protected、internal、protected internal共5种,本文介绍了这5种修饰符的用法与可访问性。
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器