C#——静态构造函数什么时间调用

使用静态构造函数的情况:类有一些静态字段和属性要在第一次使用类之前从外部源中初始化这些静态字段和属性。

结论:在这里第一次使用类之前调用的意思不单单指new一个对象的时候已包括通过类访问静态成员的时候。

理解:在第一次 Student s1=new Student()或者第一次Student.school时都会执行static Student(){}静态构造方法


//本人自己敲代码是出现的一个问题;其原因就是我自己一开始错误理解为只有new是才第一次调用静态构造函数。

 

//程序的功能:

Main函数顺序

1.主函数输入一个string 赋值给   Commodity类的静态成员变量yanse。(在这我已经使用了Commodity类的static了)

2.主函数中new一个Commodity类,计划是在new之前去自动执行静态构造函数 (这是有问题的)

3.主函数打印信息查看控制台颜色

 

实际情况是调用的顺序是

在1.时Commodity.yanse=date该语句之前(而不是2.时的new Commodity.之前);就已经自动调用commodity的静态函数了,此时先用了yanse=" ";控制台为红,然后在赋值

 

代码部分 :  

 class Commodity
    {
        public static string yanse="";//问题所在

     static Commodity()//静态构造函数的作用 :周六周日控制台颜色为绿,否则为红
        {
            //如果是周六周日控制台颜色为绿,否则为红
            if (yanse.IndexOf("周六") != -1 || yanse.IndexOf("周日") != -1)
            {
                Console.BackgroundColor = ConsoleColor.Green;
            }
            else
            {
                Console.BackgroundColor = ConsoleColor.Red;
            }
        }
    }
}

 

  static void Main(string[] args)
        {


            Console.Write("请输入今天周几:");
            string date = Console.ReadLine(); 
            Commodity.yanse = date;
            Commodity c = new Commodity();
            Console.WriteLine("今天是{0}",Commodity.yanse);
        }


//在最后我想提一个问题:既然A.main函数中在对static变量赋值(Commodity.yanse=date)之前就用了静态构造函数,

同时B.静态构造函数又不能接受参数;

那我怎么在外面给static变量初始化?,还是说我的static变量的就是应该在静态构造函数中就已经知道要赋什么值了(不需要在外面给他值了)?

感觉是后者,静态构造函数的作用是初始化static字段或属性(即给一个确定的初值),那我可以之后改变static的值,不能再静态构造函数里改变

你可能感兴趣的:(C#)