可以使用以下访问修饰符在进行声明时指定类型或成员的可访问性:
同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。
同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。
受保护的内部 该类型或成员可由对其进行声明的程序集或另一程序集中的派生类中的任何代码访问。
专用受保护只有在其声明程序集内,通过相同类中的代码或派生自该类的类型,才能访问类型或成员。
下面的示例演示如何在类型和成员上指定访问修饰符:
public class Bicycle
{
public void Pedal() { }
}
以下各节提供了有关可访问性的更多详细信息。
类和结构可访问性
如果未指定任何访问修饰符,则默认设置为内部。
不能从包含类型的外部访问私有嵌套类型。
如果允许这样,则它将具有使 A 公开的效果,因为可从派生类访问 A 的所有受保护的或内部成员。
友元程序集。
类和结构成员可访问性
结构成员无法声明为受保护,因为结构不支持继承。
但是,如果内部类的公共成员实现了接口方法或替代了在公共基类中定义的虚拟方法,则可从该程序集的外部访问该成员。
同样,如果 A 声明为私有,则不能具有类型 A 的受保护的属性。
运算符(C# 参考)。
终结器不能具有可访问性修饰符。
若要设置类或结构成员的访问级别,向成员声明添加适当的关键字,如以下示例中所示。
// public class:
public class Tricycle
{
// protected method:
protected void Pedal() { }
// private field:
private int wheels = 3;
// protected internal property:
protected internal int Wheels
{
get { return wheels; }
}
}
备注
此外,从 C# 7.2 开始,可以使用专用受保护的访问修饰符实现相同的效果,而无需使包含的类属于内部。
其他类型
没有访问修饰符可以应用于接口成员。
枚举成员始终为公共的,并且不应用任何访问修饰符。
默认情况下,当在命名空间内直接声明它们时,它们具有内部访问,当将它们嵌套在命名空间内时,它们具有私有访问。
C# 语言规范
该语言规范是 C# 语法和用法的权威资料。
请参阅
from:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers