OctopusKing

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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工具查看编译后生成的代码,如下:

 

 

结论:如果类中的静态字段或者属性,在声明时与静态构造函数中都赋值,那么编译器在编译的时候,会将声明时的值移动一个位置(至静态构造函数中,且在未编译前构造函数中的赋值之前)。

  从而最终显现的值为:编译前,在构造函数中所赋得值。

 

posted on 2023-01-31 09:43  八爪鱼~  阅读(334)  评论(0编辑  收藏  举报