当前位置:首页 > Windows程序 > 正文

C# 之 静态字段初始化

2021-05-26 Windows程序

      当一个字段声明中含有 static 修饰符时,由该声明引入的字段为静态字段(静态变量)。当不存在 static 修饰符时,由该声明引入的字段为实例字段(实例变量)。

      静态字段不属于某个特定的实例;相反,它只标识了一个存储位置。不管创建了多少个类实例,对于关联的应用程序域来说,在任何时候静态字段都只会有一个副本。实例字段属于某个实例。具体说来,类的每个实例都包含了该类的所有实例字段的一个单独的集合。

(2)字段声明可以包含变量初始值设定项,两者初始化区别如下:

  对于静态字段,变量初始值设定项相当于在类初始化期间执行的赋值语句。

  对于实例字段,变量初始值设定项相当于创建类的实例时执行的赋值语句。

示例如下:

using System; class Test { static double x = Math.Sqrt(2.0); int i = 100; string s = "Hello"; static void Main() { Test a = new Test(); Console.WriteLine("x = {0}, i = {1}, s = {2}", x, a.i, a.s); } }

产生输出:

x = 1.4142135623731, i = 100, s = Hello

这是因为对 x 的赋值发生在静态字段初始值设定项执行时,而对 i 和 s 的赋值发生在实例字段初始值设定项执行时。

(3)类的静态字段变量初始值设定项对应于一个赋值序列,这些赋值按照它们在相关的类声明中出现的文本顺序执行。如果类中存在静态构造函数,则静态字段初始值设定项的执行在该静态构造函数即将执行前发生。否则,静态字段初始值设定项在第一次使用该类的静态字段之前先被执行,但实际执行时间依赖于具体的实现。

如下示例:

using System; class Test { static void Main() { Console.WriteLine("{0} {1}", B.Y, A.X); } public static int F(string s) { Console.WriteLine(s); return 1; } } class A { public static int X = Test.F("Init A"); } class B { public static int Y = Test.F("Init B"); }

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/71271.html