• 静态构造函数


    静态构造函数主要用来初始化静态变量的值.
    这种函数只执行一次,在第一次创建类的对象的时候,就会自动调用它.
    可以参考一下下面的代码.

    using System;

    class Welcome
    {
    public Welcome()
    {
    Console.WriteLine(
    "构造函数 Welcome()");
    }


    static Welcome()
    {
    Console.WriteLine(
    "构造函数 static Welcome()");
    }


    static void Main()
    {
    new Welcome();
    new Welcome();
    Console.ReadLine();
    }

    }


    执行结果:
    构造函数 static Welcome()
    构造函数 Welcome()
    构造函数 Welcome()


    又比如下面的代码

    public class User
      
    {
       
    static private int count;
       
    static public int Count
       
    {
        
    get
        
    {
         
    return count;
        }

       }

       
    public User() 
       
    {
        count
    ++;
       }

       
    static User()
       
    {
        count 
    = 0;
       }

      }

      
      
    private void Page_Load(object sender, System.EventArgs e)
      
    {
       
    // 在此处放置用户代码以初始化页面
       Response.Write("User Count = " + User.Count);
       Response.Write(
    "<hr/>Creating User Alex.");
       User Alex 
    = new User();
       Response.Write(
    "<br/>User Count = " + User.Count);
       Response.Write(
    "<hr/>Creating User Rob.");
       User Rob 
    = new User();
       Response.Write(
    "<br/>User Count = " + User.Count);
       Response.Write(
    "<hr/>Creating User Jake.");
       User Jake 
    = new User();
       Response.Write(
    "<br/>User Count = " + User.Count);   
      }



    这段代码的执行结果是:
    User Count = 0
    ----------------------------------------------------------------------

    ----------
    Creating User Alex.
    User Count = 1
    ----------------------------------------------------------------------

    ----------
    Creating User Rob.
    User Count = 2
    ----------------------------------------------------------------------

    ----------
    Creating User Jake.
    User Count = 3


    如果一些操作只希望被执行一次。这时候就可以考虑使用静态构造函数。当然如果设计的面向对象一些的话,那就是使用单件模式了。


    静态构造函数可以在第一次调用静态类的任何方法、属性时自动调用,所以在静态构造函数里抛出的异常捕获比较麻烦。

    静态构造函数自动被调用,不能被显式调用。虽然提供了许多约束条件,但是静态构造函数执行的确切时间和顺序是不确定的:
    一个类的静态构造函数在这个类的任何实例被创建前执行。
    一个类的静态构造函数在类的任何静态成员被引用前执行。
    一个类的静态构造函数在它的所有派生类的静态构造函数执行之后执行。
    一个类的静态构造函数从不会被执行一次以上。


    一个类的静态构造函数在它的所有派生类的静态构造函数执行之后执行。


    这个是指父类有一个静态构造函数,子类也有一个静态构造函数,比如下面的代码
    using System; 

    namespace StaticConstruct 


    public class ObjectChild:ObjectParent 

    public ObjectChild() 

    Console.WriteLine(
    "子类构造函数!"); 
    }
     

    static ObjectChild() 

    Console.WriteLine(
    "子类静态构造函数!"); 
    }
     
    }
     


    public class ObjectParent 

    public ObjectParent() 

    Console.WriteLine(
    "父类构造函数!"); 
    }
     

    static ObjectParent() 

    Console.WriteLine(
    "父类静态构造函数!"); 
    }
     
    }
     

    class Class1 

    [STAThread] 
    static void Main(string[] args) 

    ObjectChild obj 
    = new ObjectChild(); 
    Console.ReadLine(); 
    }
     
    }
     
    }
     

    执行的结果是:

    子类静态构造函数!
    父类静态构造函数!
    父类构造函数!
    子类构造函数!
  • 相关阅读:
    my first blog
    CentOS启动报错:Centos kernel panic-not syncing:VFS:Unable to mount root fs on unknown block
    J2EE在Web容器中启动报错:com.sun.jdi.InvocationException occurred invoking method.
    SVN报错:can't open file db/txn-current-lock:permission denied 解决方法
    Linux(CentOS6.4、CentOS6.3)下安装、配置PostgreSQL9.2
    [模板] 线性代数:矩阵/高斯消元/矩阵求逆/行列式
    [模板] 杂项:二分/离散化/随机数/其他
    [模板] 图论:存储/拓扑排序
    Luogu1137 旅行计划(拓扑排序)
    C++模板、.vimrc和一些Linux配置
  • 原文地址:https://www.cnblogs.com/jincwfly/p/919886.html
Copyright © 2020-2023  润新知