zoukankan      html  css  js  c++  java
  • 类型的初试化器的调用时机

    先看代码
    class A
         {
              public static int X;
              static A(){
                   X=B.Y+1;
              }
          }
          class B
          {
               public static int Y=A.X+1;
               static B(){}
               static void Main(){
                    Console.WriteLine("X={0},Y={1}",A.X,B.Y);
                    Console.Read();
               }
           }

    问输出结果是什么?
    基本原理:CLR对于类型的初始化器,有两种调用时机
    1)CLR保证在类型的任何一个静态成员被调用之前,调用类型初始化器。
    当类型显示定义初始化器,不添加BeforeFieldInit元数据属性,
    2)CLR保证在类型的任何一个成员被调用之前,调用类型初始化器。
    没有显示初始化器,CLR添加BeforeFieldInit元数据。

    结果居然是这样,我不明白,请各位指教。
     
    image

  • 相关阅读:
    Facade
    Adapter
    Bridge
    Factory
    Singleton
    Decorator
    Template Method
    设计模式
    寻找最小的k个数
    java并发编程(4)--线程池的使用
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/1661790.html
Copyright © 2011-2022 走看看