细说static关键词

来源:互联网 发布:linux搭建.net服务器 编辑:程序博客网 时间:2024/05/22 05:05

    static中文之意为“静态的,不变化的。被static修饰的成员将被标记为静态成员,它属于类别,是该类别所有实例的共有成员,在该类别的范畴内可以说是全局的,所以必须初始化。而非静态成员属于类别的执行个体,归每个具体的对象所专有。C#严格规定了静态成员只能通过类来获取,非静态成员只能通过对象来获取,这一点和c++static成员获取是不一样的。static 修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。我们通常使用静态成员来表示不会随对象状态的变化而发生变化的数据或计算。

  • 标记为static的静态类,只能包含静态成员。它是密封的,不能被实例化和继承,不能包含实例构造函数,只可以通过静态构造函数来分配初始值信息。当一个类中没有依赖对象标识的数据或行为时,就可以将其定义为静态类。
  • 在静态属性或方法中,只能访问static变量,也只能调用其它的static方法,不能使用this变量,不能引用任何实例成员,但是可以在方法体中使用new关键词来实例化一个对象来调用。
  • 静态构造函数为类所私有,不能再添加修饰符和使用参数。值得注意的是类的静态构造函数在程序域中至多执行一次,只有在创建类的实例或者引用类的任一个静态成员时才会激发静态构造函数,而且它在创建类的第一个实例之前调用。常用于对静态字段、只读字段等的初始化。
  • const变量和static readonly变量,它们都表示不能被修改的常量。const变量是编译时常量,声明时就必须初始化,编译期所有变量引用将被实际值所替换,它即可以修饰类成员也可以修饰局部成员。而static readonly变量是运行时常量,可在声明时也可在构造函数中进行初始化,只能修饰类成员。对于引用类型的常量,const变量的值只能是stringnullstatic readonly变量可以是任何类型。如果重定义了某个const变量的值,则需要重新编译客户端程序方可生效,而static readonly变量值发生改变则无需重新编译客户端程序,这是二者很重要的一点区别。