C#中静态字段是属于类的,访问的时候:用类名点成员名的方式。
赋值初始化的时候,可以在声明的时候赋值,也可以在静态构造函数中赋值。
如果在声明中、静态构造函数中都赋值,那么最终该成员的值,是取自哪一个呢?
验证实例:声明一个类型Foo,含有一个静态成员,并且该静态成员在声明时、与静态构造函数中都赋了值。
成员Result属性的作用是,将最终的静态属性FooNumber的值取出
public class Foo {
// 声明一个静态属性,并在声明的时候赋值 public static int FooNumber { get; set; } = 1234; public int Result { get; set; } static Foo() { FooNumber = 20; } public Foo() { Result = FooNumber; } }
Main方法
class Program { static void Main(string[] args) { Foo foo1 = new Foo(); Console.WriteLine($"foo1对象中的FooNumber属性的最终值:{foo1.Result}"); Console.ReadKey(); } }
控制台结果:
通过ILSpy工具查看编译后生成的代码,如下:
结论:如果类中的静态字段或者属性,在声明时与静态构造函数中都赋值,那么编译器在编译的时候,会将声明时的值移动一个位置(至静态构造函数中,且在未编译前构造函数中的赋值之前)。
从而最终显现的值为:编译前,在构造函数中所赋得值。