C#静态方法,静态变量

来源:互联网 发布:关键词诊断优化 编辑:程序博客网 时间:2024/05/16 02:02

      使用Static修饰符修饰的方法是静态方法,反之是非静态方法,静态方法和静态变量在创建后始终存在于同一块内存中,它不属于某一个类的具体实例,而是属于类本身,而每创建一个类的实例,系统都会为每一个非静态成员分配一个内存空间,而静态成员无论创建多少实例,类的静态成员在内存中都只占有同一块内存区域.静态字段和静态成员通常适用于一些不会 经常变化而用频繁使用的数据,如数据库连接字符串,同时由于不会自动销毁,需及时进行回收.

     C#中静态方法和非静态方法区别:

     C#静态方法为类所有,在类实例化之前即可使用,非静态方法可以访问类中的任何成员(包括静态成员),而静态方法只能访问静态成员,所以Static内存只能存在Static变量和Static方法,正因为Static方法为类所有,所以在Static内部不能使用this关键字(this表示当前对象,Static不能为类实例所访问),类的静态方法在类实例化之前就可以使用,而类中的非静态成员必须在类实例化后才可以分配内存.静态方法的效率比非静态方法高,静态方法的缺点是不会自动进行销毁,而实例化的方法可以自动销毁.静态方法和静态变量创建后始终使用同一块内存,而使用实例化的方法会创建多个内存.

 Class Test{

   public int k;

   pubic Static int b;

   public int c;

   Test(){ c=5} 

}

      在这段代码中程序的执行顺序中b>c>k,即静态成员在类实例化之前就已分配内存空间,非静态成员必须在类实例化后才分配内存空间,而在实实例化后刚必须

调用类的构造函数,所以变量的实例化顺序是: 静态成员>构造函数>非静态成员

 class A{

   int x;

   Static int y;

   Static void F(){

      x=1; //错误,不允许访问

      y=2; //正确
   }
}

      静态方法F()可以访问静态成员y,但是不能访问非静态成员x,因为x作为非静态成员,在类的每一个实例中都占有一个内存存储,而静态方法是类所共享的,他无法判断当前的x是哪个类的实例,所以不知道中内存的哪个地址去读取x,而y作为静态成员,所有类的实例都公用一个副本,很容易找到地址.

 

私有构造函数: 私有构造函数的类不能被实例化,因为private的访问级别是私有的,只能在类里面访问,类外面访问不了

protected: 保护级别,当前类和其派生类(子类)中可以访问

Internal :默认级别,当前程序集中使用

 

    

0 0
原创粉丝点击