文章目录
一、概述
所有类型和类型成员都具有可访问性级别,用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们。 可使用访问修饰符指定声明类型或成员的可访问性。
在C#语言中,共有五种访问修饰符:public、private、protected、internal、protected internal。
二、作用范围
访问修饰符 | 说明 |
---|---|
public | 公有访问,不受任何限制。 |
private | 私有访问,只限于本类成员访问,子类、实例都不能访问。 |
protected | 保护访问,只限于本类和子类访问,实例不能访问。 |
internal | 内部访问,只限于本项目内访问,其他不能访问。 |
protected internal | 内部保护访问,只限于本项目或者子类访问,其他不能访问。 |
三、补充
- protected internal 在现版本的编程使用较少,它是将保护访问与内部访问结合起来形成的一种内部保护访问。
- 直接在命名空间中声明的类和结构(即:没有嵌套在其他类或结构中的类和结构)可以是公共类和结构,也可以是内部类和结构。如果不指定访问修饰符,则默认为 internal。
- 派生类的可访问性不能高于其基类型。换句话说,不能有从内部类A派生的公共类B。 如果允许这种情况,将会使A成为公共类,因为A的所有受保护的成员或内部成员都可以从派生类访问。
- 结构成员,包括嵌套的类和结构,可以声明为公共的、 内部的,或私有的。 类成员(包括嵌套的类和结构)可以为公共的、受保护的内部、受保护的、内部的或私有的。 类成员和结构成员的访问级别,包括嵌套类和结构,默认为私有。 不可以从包含类型之外访问私有嵌套类型。
1、C#中方法、类等的默认访问修饰符
- 接口(interface)
接口成员访问修饰符默认为public,且不能显示使用访问修饰符。 - 类(class)
构造函数默认为public访问修饰符。析构函数不能显示使用访问修饰符且默认为private访问修饰符。类的成员默认访问修饰符为private。 - 枚举(enum)
枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。 - 结构(struct)
结构成员默认为private修饰符。结构成员无法声明为protected成员,因为结构不支持继承。 - 嵌套类型
嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致。
2、成员类型的可修饰,及其默认(即如果不指定)修饰符
成员类型 | 默认修饰符 | 可被修饰符 |
---|---|---|
enum | public | none |
class | private | public、protected、internal、private、protected internal |
interface | public | none |
struct | private | public、internal、private |
3、接口成员、枚举成员、 委托行为
- 接口成员始终是公共成员,因为接口的用途是让其他类型能够访问某个类或结构。访问修饰符不能应用于接口成员。
- 枚举成员始终是公共的,不能应用任何访问修饰符。
- 委托行为类似于类和结构。默认情况下,它们在命名空间中直接声明时具有内部访问权,在嵌套时具有私有访问权。