C#静态类


一.  静态类的意义?

  1. 静态成员存放在内存的一个静态区里面,太多的话是非常消耗资源的。当然好处是可以不用实例化对象而直接使用这个成员。

  2. 百度知道上看的一个答案,还不错: 
    静态类主要是共享,静态类内部成员必须是静态的。 
    静态类一般在程序加载的时候被构造。 
    我个人用静态类最多的地方的是程序配置部分,因为他的共享特性,在多个窗体中都需要调用,更主要的就是他在程序启动的时候就被初始化了。 
    就上面说的程序配置数据部分,如果使用非静态类,那么你需要在任何有可能访问到他的代码前手动初始化他,并且还要将他赋给一个静态变量后才能使用。 
    费事不费事另说,假若你需要在他构造前某个位置来调用它,那还需要修改你构造他的代码的位置。 
    非静态类使用完成后系统会自动销毁释放,所以非静态类相对来说比较安全,而静态类是在程序结束后销毁的,在销毁前一直驻留在内存中,因此出现错误的可能性会大些。 
    建议不要过多的使用静态类,适时使用。

二.  首先要知道

我们要知道,在程序运行期间,计算机内存会分成五个区域: 
1. 堆区:需要程序员手动开辟并管理,比方说创建了对象、数组、字符串等等 
2. 栈区:不需要手动管理,由系统自动完成内存管理,比方int i,什么什么 
3. 常量区(const):存放所定义的常量,如string x=“xxxx” , const int a = 4 
4. 静态区(static全局区):程序运行过程中,内存不会释放,一直存在 
5. 代码区:存放程序运行所需要的代码(都被编译成了二进制)

三、静态类的注意事项

  1. 静态类的字段、属性、方法只能由类直接调用,而不能由类的实例调用,静态类和普通类的区别就在于普通类的成员只能通过实例对象来调用,而静态类的成员只能通过类本身来调用

  2. 静态类不能创建实例对象,静态方法也不能含有参数

  3. 静态类成员必须全部是静态的或者是const常量

  4. 构造方法也可以是静态的,但是静态构造方法前面不能加访问修饰符;静态构造方法可以存在于静态类中,也可以存在于普通类中

  5. 静态构造会在访问静态类的成员时被调用,比如单纯的A.i = 10;由于静态构造会在访问静态类的成员时被调用,所以A.i不管有意无意,都会调用A的静态构造

  6. 普通类的静态成员被访问时,也会调用普通类的静态构造方法,比如 BB b = new BB();

  7. 静态类可以有构造函数,但是只被调用一次。

四、简单代码如下

namespace learning {    //改造为静态类    public static class A{        //静态字段        public static int i;        //静态构造方法前面不能加访问修饰符        //静态构造会在首次访问类中的静态成员时被调用        static A() {            Console.WriteLine("静态类A的静态构造");        }        //改造为静态方法        public static void Test() {            Console.WriteLine("test");        } }    //静态构造可以存在于普通类中    public class BB    {        static BB()        {            Console.WriteLine("普通类BB的静态构造");        }    }    class Program    {        public static void Main(string[] args)        {            //并未创建对象来调用字段i,因为i为静态字段,只能通过类来调用            //同时由于静态构造会在访问静态类的成员时被调用,所以A.i不管有意无意,都会调用A的静态构造            A.i = 10;            Console.WriteLine(A.i);            //调用静态方法            A.Test();            //这里也会调用BB的静态构造方法            BB b = new BB();        }    } }

happysneaker.com

Unity那些事儿
请先登录后发表评论
  • 最新评论
  • 总共0条评论