一.
静态构造函数用于伊始化静态数据,或用于实施仅需试行一遍的非凡操作。

静态构造函数,java静态构造函数

  1. 金沙注册送58 ,静态构造函数用于初阶化静态数据,或用于实践仅需实行1遍的优异操作。

  2. 静态构造函数既未有访问修饰符,也从没参数。

3.
在创设第2个实例或引用任叶翔态成员在此以前,将电动调用静态构造函数来伊始化类。

  1. 不可能直接调用静态构造函数。

静态构造函数,java静态构造函数。5.
假若静态构造函数引发这些,运转时将不会另行调用该构造函数,并且在程序运行所在的施用程序域的生存期内,类型将保持未伊始化。

    class Program
    {
        static void Main(string[] args)
        {
            // 在bus1实例化后调用静态构造函数,只调用一次
            Bus bus1 = new Bus(71);
            Bus bus2 = new Bus(72);
            bus1.Drive();
            System.Threading.Thread.Sleep(3600);
            bus2.Drive();
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
    public class Bus
    {
        protected static readonly DateTime globalStartTime;
        protected int RouteNumber { get; set; }
        static Bus ()
        {
            globalStartTime = DateTime.Now;
            Console.WriteLine("static constructor sets global start time to {0}", globalStartTime.ToLongTimeString());
        }
        public Bus (int routeNum)
        {
            RouteNumber = routeNum;
            Console.WriteLine("Bus #{0} is created", RouteNumber);
        }
        public void Drive()
        {
            TimeSpan elapsedTime = DateTime.Now - globalStartTime;
            Console.WriteLine("{0} is starting its route {1:N2} minutes after global start time {2}", this.RouteNumber, elapsedTime.TotalMilliseconds, globalStartTime.ToLongTimeString());
        }
    }

  

1.
静态构造函数用于开端化静态数据,或用于实行仅需举行二次的奇怪操作。 二.
静态构造函数既未有访问…

  先看一道常见标题,以下代码的实行理并了结果是何等?

金沙注册送58 1

2.
静态构造函数既未有访问修饰符,也尚无参数。

    class A
    {
        public static int X = B.Y + 1;

        static void Main(string[] args)
        {
            Console.WriteLine(X);
        }
    }

    class B
    {
        public static int Z = 10;

        public static int Y;

        static B()
        {
            Console.WriteLine(Z);
            Y = A.X + 1;
        }
    }

 

先看1道常见标题,以下代码的实践结果是怎么?

class A
{
    public static int X = B.Y + 1;

    static void Main(string[] args)
    {
        Console.WriteLine(X);
    }
}

class B
{
    public static int Z = 10;

    public static int Y;

    static B()
    {
        Console.WriteLine(Z);
        Y = A.X + 1;
    }
}

一、定义

  由名称可见,静态构造函数(也叫做类型构造函数)包括“静态”和“构造函数”三个特点。第三个特点决定了它与静态函数类似,只好选拔静态成员;首个特色决定了它与构造函数类似,具备早先化功效,并且未有重回值。

  与构造函数(针对实例对象)分化的是,静态构造函数(针对类)只进行贰次,并且是在第一个实例对象创设前被调用,所以它能够用来那一个只供给实行3遍的操作;而且它分化意有public等修饰符,由程序自动调用,不能够被外面调用。

  总括:静态构造函数用于起头化任姜滨态数据,或然用于实施仅需试行叁次的操作;在开创第叁个实例对象或许引用任李宝新态变量在此之前,将机关调用静态构造函数。

  特点:

  1、静态构造函数既没有访问修饰符,也从不参数。

  二、在创制第二个实例或引用任张伟刚态成员在此以前,将自行调用静态构造函数来发轫化类。

  三、不能直接调用静态构造函数。  

  4、在先后中,用户十分小概调节曾几何时执行静态构造函数。

  5、线程安全。

  关于线程安全要求专门表达一(Wissu)下,由于程序只怕在多线程遭受下运营,也正是也许出现同时多个线程筹划施行静态构造函数的动静。CL奥迪Q伍确认保证那么些历程是安枕而卧的,实际上调用静态构造函数的线程需求先得到四个互斥线程同步锁,如若有七个线程试图实践项目标静态构造函数,只有二个线程能博得该锁;得到锁的线程落成初步类型开头化操作,其余线程只可以等待;当开始化达成,等待的线程被提示,然后开采静态构造函数已经被实行过,就不会再实行。

二、语法  

public class StaticTester
{
    static StaticTester()
    {
    }
}

三、作用

  用于初步化静态成员。有时候大家会从配置文件读取一些值作为静态变量,类似那样:  

public class StaticTester
{
    private static readonly string key = ConfigurationManager.AppSettings["key"];
    private static readonly string value = ConfigurationManager.AppSettings["value"];

    static StaticTester()
    {           
    }
}

1旦要读取的布置音信相比多,而且要加盟一些逻辑决断,那么能够如此:

public class StaticTester
{
    private static readonly string key;
    private static readonly string value;

    static StaticTester()
    {
        key = ConfigurationManager.AppSettings["key"];
        if (string.IsNullOrEmpty(key))
        {
            throw new Exception("key变量未被正确配置!");                    
        }
        value = ConfigurationManager.AppSettings["value"];
        if (string.IsNullOrEmpty(value))
        {
            throw new Exception("value变量未被正确配置!");
        }
    }
}  

四、实行顺序

  一. 运作时,优先对静态变量举办发轫化。

      二.
倘若有静态构造函数,那么在创建第一个实例对象或许引用任刘洪涛(hóngtāo)态变量从前,调用静态构造函数。

  3. 其余操作。

金沙注册送58 2

三.
在成立第三个实例或引用任李京态成员此前,将自行调用静态构造函数来初步化类。

一、定义

4.
不或者直接调用静态构造函数。

  由名称可见,静态构造函数(也叫做类型构造函数)包罗“静态”和“构造函数”四个特色。第四个特色决定了它与静态函数类似,只好选取静态成员;第一个特征决定了它与构造函数类似,具备初始化成效,并且未有再次来到值。

五.
如果静态构造函数引发那几个,运转时将不会重复调用该构造函数,并且在程序运维所在的利用程序域的生存期内,类型将维持未起初化。

  与构造函数(针对实例对象)不相同的是,静态构造函数(针对类)只进行二遍,并且是在第1个实例对象成立前被调用,所以它能够用于那多少个只须要进行二次的操作;而且它不容许有public等修饰符,由程序自动调用,不能被外界调用。

    class Program
    {
        static void Main(string[] args)
        {
            // 在bus1实例化后调用静态构造函数,只调用一次
            Bus bus1 = new Bus(71);
            Bus bus2 = new Bus(72);
            bus1.Drive();
            System.Threading.Thread.Sleep(3600);
            bus2.Drive();
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
    public class Bus
    {
        protected static readonly DateTime globalStartTime;
        protected int RouteNumber { get; set; }
        static Bus ()
        {
            globalStartTime = DateTime.Now;
            Console.WriteLine("static constructor sets global start time to {0}", globalStartTime.ToLongTimeString());
        }
        public Bus (int routeNum)
        {
            RouteNumber = routeNum;
            Console.WriteLine("Bus #{0} is created", RouteNumber);
        }
        public void Drive()
        {
            TimeSpan elapsedTime = DateTime.Now - globalStartTime;
            Console.WriteLine("{0} is starting its route {1:N2} minutes after global start time {2}", this.RouteNumber, elapsedTime.TotalMilliseconds, globalStartTime.ToLongTimeString());
        }
    }

  总计:静态构造函数用于起初化任刘晓霖态数据,大概用于施行仅需实行1遍的操作;在成立第二个实例对象或然引用任杨洁态变量从前,将自行调用静态构造函数。

  

  特点:

  一、静态构造函数既没有访问修饰符,也从未参数。

  2、在开创第3个实例或引用任李立东态成员此前,将机关调用静态构造函数来初叶化类。

  叁、非常小概直接调用静态构造函数。  

  四、在程序中,用户不能控制哪天实施静态构造函数。

  五、线程安全。

  关于线程安全须要特别说惠氏(WYETH)(Nutrilon)下,由于程序可能在十贰线程境况下运作,也正是唯恐出现同时多少个线程计划施行静态构造函数的事态。CL揽胜确认保证这几个历程是安枕而卧的,实际上调用静态构造函数的线程要求先得到二个互斥线程同步锁,假如有五个线程试图施行项目标静态构造函数,唯有叁个线程能赚取该锁;获得锁的线程实现开端类型开始化操作,其余线程只可以等待;当开始化完结,等待的线程被唤醒,然后开掘静态构造函数已经被施行过,就不会再实行。

二、语法  

    public class StaticTester
    {
        static StaticTester()
        {
        }
    }

三、作用

  用于开首化静态成员。有时候大家会从配置文件读取一些值作为静态变量,类似那样:  

    public class StaticTester
    {
        private static readonly string key = ConfigurationManager.AppSettings["key"];
        private static readonly string value = ConfigurationManager.AppSettings["value"];

        static StaticTester()
        {            
        }
    }

  假若要读取的配置音信比较多,而且要进入一些逻辑剖断,那么能够如此:  

    public class StaticTester
    {
        private static readonly string key;
        private static readonly string value;

        static StaticTester()
        {
            key = ConfigurationManager.AppSettings["key"];
            if (string.IsNullOrEmpty(key))
            {
                throw new Exception("key变量未被正确配置!");                     
            }
            value = ConfigurationManager.AppSettings["value"];
            if (string.IsNullOrEmpty(value))
            {
                throw new Exception("value变量未被正确配置!");
            }
        }
    }  

四、实施各样

  1. 运作时,优先对静态变量实行起头化。

      2.
一旦有静态构造函数,那么在开创第5个实例对象可能引用任赵琦态变量从前,调用静态构造函数。

  三. 别样操作。

相关文章

网站地图xml地图