[整理]静态构造函数

原创 2004年08月31日 12:24:00

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

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("


Creating User Alex.");
   User Alex = new User();
   Response.Write("
User Count = " + User.Count);
   Response.Write("
Creating User Rob.");
   User Rob = new User();
   Response.Write("
User Count = " + User.Count);
   Response.Write("
Creating User Jake.");
   User Jake = new User();
   Response.Write("
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


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


静态构造函数可以在第一次调用静态类的任何方法、属性时自动调用,所以在静态构造函数里抛出的异常捕获比较麻烦。可以参看下面的讨论:
http://community.csdn.net/Expert/topic/3274/3274910.xml


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

C++静态构造函数的实现

在C#中,类的静态构造函数用于在使用类之前进行相关的初始化工作;比如,初始化静态成员或执行特定操作。CLR 在第一次创建该类对象或调用该类静态方法时自动调用静态构造函数。同时,CLR保证静态构造函数的...
  • zgtjwyftc
  • zgtjwyftc
  • 2013年10月13日 01:53
  • 1712

静态构造函数与实例构造函数

 public class A        {                       public A()            {                Console.WriteL...
  • F2164529
  • F2164529
  • 2010年04月17日 16:20
  • 1371

C#的静态构造函数和静态类

在delphi中几乎没有静态这个观念。构造函数也是实例化的构造函数。 在看C#的语法时,才了解到,还有静态构造函数。 在此记下静态构造函数的特性: 1、静态构造函数用于初始化类中的静态成员,如果类中有...
  • l09120204
  • l09120204
  • 2017年03月29日 11:36
  • 379

C# 实例构造函数和静态构造函数

静态构造函数:   #1:静态构造函数主要用于初始化一些静态的变量。静态构造函数只会执行一次,而且是在创建此类的第一个实例 或 引用任何静态成员(包括静态方法)之前,由.NET自动调用。   #2:静...
  • u013644191
  • u013644191
  • 2014年02月13日 15:23
  • 986

静态构造函数到底执行了多少次?

我们知道对于class和struct都可以定义构造函数,而构造函数又有实例构造函数和静态构造函数。实例构造函数在每次实例化时,都会执行一次。那静态构造函数是否如此呢?我们先来看一段代码: using ...
  • xxdddail
  • xxdddail
  • 2014年07月23日 10:02
  • 2839

静态变量、静态属性、静态构造函数

静态变量用static关键字修饰的变量,他是属于类的,全局可以共享,可看成Application级的变量,它在类被实例化或调用类的其它静态成员时初始化,并且只被初始化一次。在使用静态变量的时候,要注意...
  • W_wjl1900
  • W_wjl1900
  • 2017年05月21日 18:42
  • 316

关于静态构造函数执行时机

先看代码: 1.包含静态字段的调用 class Program { static void Main(string[] args) { ...
  • jaychouliyu
  • jaychouliyu
  • 2012年05月24日 15:27
  • 2523

C#静态构造函数调用机制

若一个类中有静态构造函数,在首次实例化该类或任何的静态成员被引用时,.NET自动调用静态构造函数来初始化该类。注意是“首次”,即继续实例化该类时,不会调用该类的静态构造函数。1、实例化时调用静态构造函...
  • cjolj
  • cjolj
  • 2017年02月21日 22:40
  • 235

单例模式强烈推荐的方式:利用静态构造函数

public sealed class Singleton   {    private Singleton()    {    }    //静态的构造单例模式    priva...
  • u012017783
  • u012017783
  • 2016年11月26日 14:54
  • 658

静态构造函数

    静态构造函数,是属于类的构造函数,用来初始化类的静态成员变量,它没有参数,没有返回值,没有访问修饰符,不能够被程序员调用,当类被调用时,如 new 一个对象时,可都静态成员或方法被调用时,静态...
  • rommayer
  • rommayer
  • 2009年06月29日 20:01
  • 335
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[整理]静态构造函数
举报原因:
原因补充:

(最多只允许输入30个字)