static 是由最初的限制和持久过渡到后的共享。
C语言时代的static
在C语言中,只存在函数和变量。
A、函数和全局变量,一旦加上static关键字,就限制了其作用域为本文件有效。
B、局部变量,一旦加上static关键字,其生命其为整个应用程序。
C++语言时代的static
在C++语言中,除了向C语言兼容外,提供了类的支持,同样static在C语言的特性在C++同样有效。
C、类的static关键字,在C++的类中,static只能用于修饰数据成员和函数成员(不能修饰构造函数和析构函数),用于该类所具有的信息而不属具体某个对象.
D、<注意>如果在类的成员函数中定义了static局部变量,其值会在所有对象中共享!这一点不好!
C#语言时代的static
在C#语言中,基于类static访问特性和C++相似。同时,也有了一些改变。
E、在C#中,禁止了类成员函数中的局部变量用static修饰。
F、类的静态成员字段的初始化更加简单,可以直接在类定义中赋值。初始值设定是按照文本顺序执行,如果类中有静态字段而无静态构造函数,系统会自动生成,并先于静态构造函数执行。
G、类提供了static修饰构造函数。类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数
可见static从C-->C++是由简入繁。
C#作为一种全新的语言,他消除了C++语言的一些复杂性,全面支持面向对象。所以没有C语言的全局函数和全局变量。类成员函数内也不支持静态成员变量了。
下面用下事例代码,全面阐述以上内容