当构造一个c#对象时,理解对象的字段和构造函数的顺序是非常重要的:
  1. Derived static fields//派生类静态字段
  2. Derived static constructor//派生来静态构造函数
  3. Derived instance fields//派生类实例字段
  4. Base static fields//基类静态字段
  5. Base static constructor//基类静态构造函数
  6. Base instance fields//基类实例字段
  7. Base instance constructor//基类实例构造函数
  8. Derived instance constructor//派生类实例构造函数
下面是简单的代码:
 1浅谈对象的初始化顺序using System;
 2浅谈对象的初始化顺序
 3浅谈对象的初始化顺序namespace ObjectInit
 4下面是程序执行结果:
浅谈对象的初始化顺序Derived.Static.Field1
浅谈对象的初始化顺序Derived.Static.Field2
浅谈对象的初始化顺序Derived.Static.Constructor
浅谈对象的初始化顺序Derived.Instance.Field1
浅谈对象的初始化顺序Derived.Instance.Field2
浅谈对象的初始化顺序Base.Static.Field1
浅谈对象的初始化顺序Base.Static.Field2
浅谈对象的初始化顺序Base.Static.Constructor
浅谈对象的初始化顺序Base.Instance.Field1
浅谈对象的初始化顺序Base.Instance.Field2
浅谈对象的初始化顺序Base.Instance.Constructor
浅谈对象的初始化顺序Base.Instance.Field3
浅谈对象的初始化顺序Derived.Instance.Virtual
浅谈对象的初始化顺序Derived.Instance.Constructor
浅谈对象的初始化顺序Derived.Instance.Field3

C#对象初始化的原则 :


  • Fields then Constructor.  //先初始化字段,后执行构造函数.
  • Static then Instance. //在第一次访问类时,先初始化静态字段和构造函数,后初始化对象的实例字段和构造函数.
  • Derived then Base. // 不论字段还是静态构造函数,派生类对象总是先于基类对象初始化.
  • Except Instance Constructors.  //对于实例构造函数,基类构造函数总是先于派生类的实例构造函数初始化.
  • Don't Assume Field Order.  //字段的初始化顺序总是按照他们在源文件的定义顺序执行的.
  • Two-Phase for Virtual. //避免从构造函数中调用虚拟方法.

相关文章:

  • 2021-06-10
  • 2022-12-23
  • 2021-12-09
  • 2019-10-29
  • 2021-11-01
  • 2022-12-23
  • 2021-08-04
猜你喜欢
  • 2021-12-24
  • 2021-11-04
  • 2021-10-20
  • 2021-07-27
  • 2021-09-27
  • 2022-01-09
相关资源
相似解决方案