C#中静态字段声明时赋值与构造函数中赋值
Posted OctopusKing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中静态字段声明时赋值与构造函数中赋值相关的知识,希望对你有一定的参考价值。
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工具查看编译后生成的代码,如下:
结论:如果类中的静态字段或者属性,在声明时与静态构造函数中都赋值,那么编译器在编译的时候,会将声明时的值移动一个位置(至静态构造函数中,且在未编译前构造函数中的赋值之前)。
从而最终显现的值为:编译前,在构造函数中所赋得值。
以上是关于C#中静态字段声明时赋值与构造函数中赋值的主要内容,如果未能解决你的问题,请参考以下文章