原文转载:“http://blog.csdn.net/eclipseluo/article/details/4822148”
C#语言的另一个特性是可以将一个类声明为static类。static类中只能包含static成员(使用该类创建的所有成员将共享这些成员的同一个副本)。静态类纯粹作为工具方法和字段的一个容器来使用。static类中不能包含任何实例数据或方法。另外,使用new操作符来创建static类的一个对象是没有意义的。如果坚持要这样做,编译器会报错。如果需要执行任何初始化,那么static类可以包含一个默认的构造函数,前提是该构造函数也被声明为static。其他任何类型的构造函数都是非法的,编译器会报错。
Static 函数在使用时不用实例化它所在的类,直接用就得了。就象Convert.ToInt32()等这些函数。
不用Static的函数,就必须实例化它所在的类进行使用。(完)
C#拥有两种不同的常量:静态常量(compile-time constants)和动态常量(runtime constants)。它们有不同的特性,错误的使用不仅会损失效率,还可能造成错误。相比之下,静态常量在速度上会稍稍快一些,但是灵活性却比动态常量差很多。
//静态常量(隐式是静态的) 静态常量在编译时会将其替换为所对应的值,也就是说下面这2句话通过编译器编译后产生的IL是一样的。 //通过编译后二者会被翻译成相同的中间语言 动态常量的值是在运行时获得的。IL中将其标为只读常量,而不是用常量的值代替。 静态常量只能被声明为简单的数据类型(内建的int和浮点型)、枚举或字符串。下面的程序段是通不过编译的。你不能用new关键字初始化一个静态常量,即便是对一个值类型来说。 //这样是错误的 只读数据也是常量的一种,它们不能在构造器初始化之后被修改。但是它同静态常量不同,它的值是在运行时才被指派的,因此就会获得更大的灵活性。动态常量可以是任意的数据类型。 二者最大的差别在于:静态常量在编译时会将其换为对应的值,这就意味着对于不同的程序集来说,当你改变静态常量的时候需要将其重新编译,否则常量的值不会发生变化,可能引发潜在的问题,而动态常量就不会有这种情况。 用const定义的常量(隐式是静态的),需要像访问静态成员那样去访问const定义的常量,而用对象的成员方式去访问会出编译错误。 声明的同时要设置常量值。 静态常量 动态常量
static关键字大家肯定是用的很多了,说起来大家也都知道,这有什么好谈的? 可是回想起以前的一些事情,不免叫我心中...... 事情起因,一个项目中的一些类中全部都是方法,但是被设计成了非静态类了。于是我为了说服同事将这些类设计成静态的,下了好大的力度。等同事明白过来以后,我已疲惫不堪。 不知道您是否存在以下观点?
下面针对以上的一些观点,笔者阐述下自己的理解,如果哪里有写的不对的地方,还请指出。
|