C#中的静态类和静态成员

静态类

静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明。 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类;其次,它防止在类的内部声明任何实例字段或方法。

静态类的特点:

  • 它们仅包含静态成员。
  • 它们不能被实例化。
  • 它们是密封的。
  • 它们不能包含实例构造函数
  • 静态类的另一个特点在于,C#编译器会自动把它标记为sealed。这个关键字将类指定为不可扩展;换言之,不能从它派生出其他类。

什么时候使用静态类?

我们就静态类的特点可以总结出:静态类可以作为不与特定对象关联的方法的组织单元,我们可以把一些工具方法放到一起,因为其和实例没有关系,静态类能够使您的实现更简单、迅速,因为您不必创建对象就能调用其方法。比如类库中的Math类;我们写程序时一些常用的类型转化类等等。

静态成员

即使没有创建类的实例,也可以调用该类中的静态方法、字段、属性或事件。如果创建了该类的任何实例,不能使用实例来访问静态成员。只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件。

静态成员的声明

在成员的返回类型之前使用 static 关键字来声明静态类成员,例如:
public class Automobile
{
    public static int NumberOfWheels = 4;
    public static int SizeOfGasTank
    {
        get
        {
            return 15;
        }
    }
    public static void Drive() { }
    public static event EventType RunOutOfGas;
    //other non-static fields and properties...
}
静态成员在第一次被访问之前并且在任何静态构造函数(如调用的话)之前初始化。若要访问静态类成员,应使用类名而不是变量名来指定该成员的位置。

静态成员特点

1:非静态类可以包含静态的方法、字段、属性或事件; 2:无论对一个类创建多少个实例,它的静态成员都只有一个副本; 3:静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量; 4:静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员; 5:虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,  不属于类的实例。因此,可以同对待静态字段一样使用 ClassName.MemberName 表示法来访问 const 字段; 6:C# 不支持静态局部变量(在方法内部定义静态变量)。

静态构造函数

1:静态类可以有静态构造函数,静态构造函数不可继承; 2:静态构造函数可以用于静态类,也可用于非静态类; 3:静态构造函数无访问修饰符、无参数,只有一个 static 标志; 4:静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且 只执行一次。

注意

1:非静态类在实例化后是在内存中是独立的,它的变量不会重复,在使用后会及时销毁,所以不会出现未知 的错误。 2:建议更多地使用一般类(非静态类)。
posted @ 2013-04-09 13:43  娴言娴语  阅读(419)  评论(0编辑  收藏  举报