何时进行自动生产初始化



在WebForms .aspx页面系统上,主页具有一些属性自动初始化,如

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

分析页面负载,我看到PreRender事件与其中一个属性的初始化之间存在较大的间隙。

我可以在哪里寻找延迟?两者之间的运行是什么?

不是自动属性。那是一个表达式成员。

您对MyProp的实现计算bool.Parse(Service.Settings["YorN"]); 每当属性Getter称为时。因此,在您的情况下,每当调用 MyProp时,该代码是运行的,并且它是每个称为的时间时间。

如果您使用的是

的自动属性
public bool MyProp {get;} = bool.Parse(Service.Settings["YorN"]);

然后将在创建实例之后和在调用构造函数之前(其他字段初始化器运行时)运行。请注意,由于此代码在字段初始器中运行,因此无法使用隐式参考(this),因此如果Service是实例变量,则不会编译。

从技术上讲,这是一个表达式的成员,只有在您尝试"获取"属性时才会被调用。因此,每当被要求。

时称为

这是:

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

他们不这样做,在这种情况下,属性就像是表达式时的方法 - 当您尝试从中读取它们时,对其内容进行了评估。

因此,每当某事试图读取它运行的MyProp的值时

您可能想做的就是将其作为一个只读的属性,并在类构造函数中进行设置。

最新更新