C#修饰符

来源:互联网 发布:如来藏 知乎 编辑:程序博客网 时间:2024/06/14 01:36
Public:访问不受限制。namespace和enum成员,interface的成员隐式具有public修饰符
Private:只有同一个class或struct中能被访问。class或struct中的成员如果不加修饰符则默认是private
protected:访问权限于包含类或从包含类派生的类。可以跨程序集。protected类型并不是能够被派生类随心所欲的访问,必须是通过派生类对象才能访问。
internal:仅限于当前程序集,即同一个project中。class、struct或interface如果不加修饰符则默认是internal,但也可以声明为internal或public(注:如果class、struct是在一个class中声明的也可以protected、private修饰,也就是说在一个class中还可以嵌套声明一个class)。
protected internal:同一程序集,以及所有程序集中继承的子类可以访问(由于struct不能继承,所有它的成员不能由protected或protected internal修饰)。 “派生的class可访问性不能比基类更高,也就是说如果基类被internal修饰则子类只能用internal修饰”。
sealed:在类声明中使用sealed可防止其它类继承此类;在方法声明中使用sealed能够允许类从基类中继承,并防止它们重写特定的虚方法或虚属性。 sealed修饰符用于防止非有意的派生,但是它还能促使某些运行是优化。(注:密封类不能同时有时抽象类,因为抽象类需要被继承。如果密封类中存在虚成员函数,则该成员函数可以转化为非虚的,函数修饰符virtual不再生效。)
abstract:抽象类。表示所修饰的类不是完整的,并且它只能用作基类。如果类成员被abstract修饰,则该类前必须添加abstract,因为只有抽象类才可以有抽象方法。抽象类不能直接实例化,并且对抽象类使用new会导致编译错误,而且abstract修饰的成员在派生类中必须全部不实现。抽象方法和抽象属性无法直接调用,必须通过派生类进行实现后才能调用。抽象类不能sealed。(当从抽象类派生非抽象类时,这些非抽象类必须具体实现继承的所有抽象成员,从而重写那些抽象成员。)(abstract不能是私有的)
virtual:用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。(irtual必须有实现,哪怕仅仅添加一对大括号;virtual不能与static、abstract、private和override一起使用)虚方法和虚属性在派生类中可以进行重写,如果没有重写则会调用父类中的该虚方法和虚属性。(如果利用override重写,那么调用派生类中的重写之后的方法;如果利用new重写,那么调用基方法)(irtual不能是私有的)
interface:接口用于描述一组类的公共方法/公共属性,它不实现任何的方法或属性,只是告诉继承它的类至少要实现哪些功能,继承它的类可以增加自己的方法(接口中存在的方法,继承该接口的类必须要实现这些方法)。
接口中可以包含方法、委托或事件和属性,但是不能包含字段(接口只是描述规则,所以接口不能实例化,而字段必须要分配内存实例化)、常量、操作符、构造函数和析构函数,而且不能包含任何静态成员。
接口可以提高系统的扩展性、维护性、约束性。(接口是方法的抽象,如果方法跨越不同类的对象,可使用接口)
override:提供从基类继承的成员的新实现。
重写的方法要与基方法具有相同的签名。重写的两个函数的函数特征要相同(函数特征包括函数名、参数的类型和个数)
override不能更改irtual方法的可访问性。override方法和irtual方法必须具有相同的访问级别修饰符。
不能使用new、static或virtual修饰符来修改override方法。
overload:重载某个方法实在同一个类中发生的。重载的函数名相同,但是函数特征要不同(重载的参数列表不同和参数列表的顺序无关)。重载可以有不同的返回值。
static:静态,可以修饰类、字段、属性、方法。用在类里的属性、方法前,这样的静态属性与方法不需要实例化就能访问,通过类名或对象名就能访问它。方法内部的静态变量,执行完静态变量值不消失,再次执行次对象的方法是,值仍存在。
readonly:当字段声明包括readonly修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中。readonly为运行时常量,程序运行时进行赋值,赋值完成后便无法更改。
const:用来表示不变常量。const修饰的常量在声明时必须赋值。const常量只能被赋予数字(整数、浮点数)、字符串以及枚举类型。在取值永久不变的情况下可以使用const常量。

0 0