例如在类myclass中有一个static int s;同时创建了myclass类的实例obj1,obj2,并将s=20;
即使是在obj1=null,后仍旧可以在obj2中得到s的值为20。这就是在描述static型变量(也就是static是按照程序生命周期来分配释放变量)的有效范围吗?这里的程序是指当前引用该类实例的程序exe文件?

解决方案 »

  1.   

    static 是类级别,不依赖于具体对象,再编译期就分配空间
      

  2.   

    使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。
    不能通过实例引用静态成员。然而,可以通过类型名称引用它。
      

  3.   

    class A
    {
    static int b = 0 ;}A.b //0
    A a = new A
    a.b //err
      

  4.   

    使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。static 修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。
    备注
    • 常数或者类型声明隐式地是静态成员。
    • 不能通过实例引用静态成员。然而,可以通过类型名称引用它。静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。
    静态类
    类可以声明为 static,指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR) 自动加载。
    使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。
    静态类的主要功能如下:
    • 它们仅包含静态成员。
    • 它们不能被实例化。
    • 它们是密封的。
    • 它们不能包含实例构造函数。
    因此,创建静态类与创建仅包含静态成员和私有构造函数的类基本相同。私有构造函数阻止类被实例化。
    使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实利。
    静态类是密封的,因此不可被继承。它们不能从除 Object 外的任何类中继承。静态类不能包含实例构造函数;但是,它们可以具有静态构造函数。
    何时使用静态类
    使用静态类作为不与特定对象关联的方法的组织单元。此外,静态类能够使您的实现更简单、迅速,因为您不必创建对象就能调用其方法。以一种有意义的方式组织类内部的方法(例如 System 命名空间中的 Math 类的方法)是很有用的。
    静态成员
    即使没有创建类的实例,也可以调用该类中的静态方法、字段、属性或事件。如果创建了该类的任何实例,不能使用实例来访问静态成员。只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件。静态成员通常用于表示不会随对象状态而变化的数据或计算;例如,数学库可能包含用于计算正弦和余弦的静态方法。
    静态方法可以被重载,但不能被重写。
    在成员的返回类型之前使用 static 关键字来声明静态类成员,
    静态成员在第一次被访问之前并且在任何静态构造函数(如调用的话)之前初始化。若要访问静态类成员,应使用类名而不是变量名来指定该成员的位置。
      

  5.   


    不必创建myclass类的任何实例,也可以设置 myclass.s = 20;
      

  6.   

    呵呵,明白了,只是myclass中的这个static int i必须是public的