C# 自动属性何时初始化?

When Do C# Auto-Properties Initialize?

在网络表单 .aspx 页面系统上,母版页有一些自动初始化的属性,因此

public bool MyProp => bool.Parse(Service.Settings["YorN"]);

分析页面加载,我发现 PreRender 事件与其中一个属性的初始化之间存在很大差距。

我在哪里可以查出延迟?两者之间有什么关系?

他们没有,在这种情况下,当属性具有表达式主体时,它们就像方法一样 - 当您尝试读取它们时,会评估它们的内容。

所以每次尝试读取 MyProp 的值时,它都会运行该表达式。

您可能想要做的是将其设置为只读 属性 并在 类 构造函数期间进行设置。

那不是汽车 属性。那是一个表情浓郁的成员。

每次 属性 getter 被调用时,您的 MyProp 实现都会计算 bool.Parse(Service.Settings["YorN"]); 。因此,在您的情况下,每当调用 MyProp 时,该代码就是 运行,并且它是 运行 each 次调用。

如果您使用自动 属性,则为

public bool MyProp {get;} = bool.Parse(Service.Settings["YorN"]);

那么它将是 运行 在创建实例之后,就在调用构造函数之前(当其他字段初始值设定项 运行 时)。请注意,由于此代码 运行s 在字段初始值设定项中,因此它不能使用隐式引用 (this),因此如果 Service 是实例变量,则不会编译。

从技术上讲,这是一个表达式体成员,只有当您尝试 "get" 属性 时才会调用它。所以它被称为 每当它被要求 .

相当于:

public bool MyProp 
{ 
    get 
    { 
         return bool.Parse(Service.Settings["YorN"]);
    }
}