C#:访问修饰符
- public
-
同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。
- private
-
只有同一类或结构中的代码可以访问该类型或成员。
- protected
-
只有同一类或结构或者此类的派生类中的代码才可以访问的类型或成员。
- internal
-
同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。
- protected internal
-
由其声明的程序集或另一个程序集派生的类中任何代码都可访问的类型或成员。 从另一个程序集进行访问必须在类声明中发生,该类声明派生自其中声明受保护的内部元素的类,并且必须通过派生的类类型的实例发生。
这里主要说一下protected internal,它所限定的访问权限是internal和protected的访问权限的并集,而不是交集,也就是说它的访问权限包括internal的访问权限和
protected的访问权限。可以用以下公式说明它的访问权限:
(protected internal)的访问权限=(internal)的访问权限+(protected)的访问权限
或者可以这么理解
(protected internal)的访问权限=(internal)的访问权限∪(protected)的访问权限
访问权限的大小比较:
private<protected<protected internal<public或者private<internal<protected internal<public
protected的访问权限和internal的访问权限不具有可比性。
对于访问修饰符,有以下几点需要注意:
①一个成员或类型只能有一个访问修饰符,但使用protected internal组合时除外。
②命名空间上不允许使用访问修饰符。命名空间没有访问限制。
③根据出现成员声明的上下文,只允许某些声明的可访问性。如果在成员声明中未指定访问修饰符,则使用默认的可访问性。不嵌套在其他类型中的顶级类型的可访问性只能是internal或public。这些类型的默认可访问性是 internal。嵌套类型是其他类型的成员,它们可以具有下表所示的声明的可访问性。
属于 | 默认的成员可访问性 | 该成员允许的声明的可访问性 |
enum | public | 无 |
class |
private |
public protected internal private protected internal |
interface | public | 无 |
struct |
private |
public internal private |