构造函数和字段初始化执行顺序

guo*_*guo 6 c#

public class RegisterViewModel{
  public RegisterViewModel()
  {
      MaxDepartmentLevel = db.Settings.Find(1).MaxDepartmentLevel;
  }

  private ApplicationDbContext db = new ApplicationDbContext();
  public int MaxDepartmentLevel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这安全吗?能否保证db会在行之前初始化

MaxDepartmentLevel = db.Settings.Find(1).MaxDepartmentLevel;跑步?

换句话说,具有字段初始化和构造函数的类的执行顺序是什么?

Zby*_*000 2

任何构造函数都会调用父构造函数,然后在执行其代码之前初始化成员变量。因此该代码将起作用。

初始化顺序一般为:

  1. this()调用时同一类的成员变量或其他构造函数
  2. 父构造函数(调用时跳过this()
  3. 提供的自定义代码

请参阅https://msdn.microsoft.com/en-us/library/aa645606(v=vs.71).aspx