1、static
表示被修饰的对象的生命周期与当前的应用程序域相同,因此可以在多个实例中共享
2、const
表示常量且只能在声明时赋值,因此const的常量在编译时就能确定,它如果没有被static修饰并不能在多个实例中共享(通常static会和const一起使用以作为标志位来用,但不是必须的)
3、readonly
只能用来修饰成员字段,且它所修饰的字段可以在声明时和构造函数中赋值且在构造函数结束后就不能再赋值,因此它在运行时确定
4、sealed
当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承,还可以在重写基类中的虚方法或虚属性的方法或属性上使用 sealed 修饰符。这将使您能够允许类从您的类继承,并防止它们重写特定的虚方法或虚属性
5、virtual
virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:
情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法
情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法
6、abstract
abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现
7、override
使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。不能重写非虚方法或静态
方法。重写基方法必须是虚拟的、抽象的或重写的。也就是说,用 override 修饰符重写的基类中的方法必须是 virtual, abstract 或 override 方法
8、overload
指重载,就是说函数名相同,函数特征不同,系统会根据你提供的参数来调相应的函数,使用重载方法的指南:
a. 用方法重载来提供在语义上完成相同功能的不同方法
b. 使用方法重载而不是允许默认参数。默认参数的版本控制性能不好,因此公共语言规范(CLS)中不允许使用默认参数
c. 正确使用默认值。在一个重载方法系列中,复杂方法应当使用参数名来指示从简单方法中假定的默认状态发生的更改
d. 对方法参数使用一致的排序和命名模式。提供一组重载方法,这组重载方法带有递增数目的参数,以使开发人员可以指定想要的级别的信息,这种情况很常见。您指定的参数越多,开发人员就可指定得越详细
e. 如果必须提供重写方法的能力,请仅使最完整的重载是虚拟的并根据它来定义其他操作
9、params
指定在参数数目可变处采用参数的方法参数,在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字
10、ref
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字,传递到 ref 参数的参数必须先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化,属性不是变量,因此不能作为 ref 参数传递,尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的。如果尝试这么做,将导致不能编译该代码,如果一个方法采用ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载
11、out
out 关键字会导致参数通过引用来传递。这与 ref 关键字类似。与 ref 的不同之处:ref 要求变量必须在传递之前进行初始化,尽管作为 out 参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值,因此,当调用方法后,out形参引用的变量会包含一个值。
12、internal
是类型和类型成员的访问修饰符。限定的是只有一同一个程序集中才可以访问,可以跨类。定义为内部访问的类型或成员在该类型或成员所在程序集外部是无法引用的。
13、protected
限定的是只有在继承的子类中才可以访问,可以跨程序集。