访问修饰符#
访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性,C#有4个访问修饰符:public、private、protected、internal,使用这些访问修饰符可以指定以下5个访问级别:
- public: 同一程序集(DLL或EXE)中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。
- private: 只有同一类或结构中的代码可以访问该类型或成员。
- protected: 只有同一类或结构或者此类的派生类中的代码才可以访问该类型或成员。
- internal: 同一程序集中的任何代码都可以访问该类型或成员,但的代码不可以。
- protected internal: 在一程序集中,protected internal体现的是internal的性质;在其他程序集中,protected internal体现的是protected的性质。
一个成员或类型只能有一个访问级别。
类型的可访问性#
不嵌套在其他类型中的顶级类型的可访问性只能是internal或public,这些类型的默认可访问性是internal。嵌套类型是其他类型的成员,具有和其它成员一样的可访问性。
class A {} // 默认可访问性是internal class B { class Nested {} // 默认可访问性是private }
成员的可访问性#
类型 | 默认的成员可访问性 | 该成员允许声明的可访问性 |
---|---|---|
enum | public | 无 |
class | private | public、private、protected、internal、protected internal |
interface | public | 无 |
struct | private | pubic、private、internal |
abstract#
使用abstract修饰的类为抽象类,抽象类只能是其他类的基类,不能与sealed、static一起使用。
abstract可以修饰抽象类中的方法或属性,此时,方法或属性不能包含实现,且访问级别不能为私有。
抽象类不能被实例化。
sealed#
使用sealed修饰的类为密封类,密封类无法被继承,不能和abstract、static一起使用。
当sealed用于方法或属性时,必须始终与override一起使用。
static#
使用static修饰的类为静态类,静态类所有成员都必须是静态的,不能与abstract、sealed一起使用。
static可以修饰方法、字段、属性或事件,始终通过类名而不是实例名称访问静态成员,静态字段只有一个副本。
静态类不能被实例化。
const#
使用const关键字来声明某个常量字段或常量局部变量,必须在声明常量时赋初值。
不能与static一起使用,常量默认是static的,常量字段只有一个副本。
readonly#
使用readonly关键字来声明只读字段。
只读字段可以在声明或构造函数中初始化,每个类或结构的实例都有一个独立的副本。
可以与static一起使用,声明静态只读字段。
静态只读字段可以在声明或静态构造函数中初始化,静态常量字段只有一个副本。
virtual#
virtual关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。
默认情况下,方法是非虚拟的。 不能重写非虚方法。
virtual修饰符不能与static、abstract、private或override修饰符一起使用。
override#
要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用override修饰符。
重写的成员必须是virtual、abstract或override的。
参考资料#
1、修饰符
2、可访问级别