在webforms .aspx
页面系统中,母版页有一些自动初始化的属性,因此
public bool MyProp => bool.Parse(Service.Settings["YorN"]);
分析页面加载,我看到PreRender
事件与其中一个属性的初始化之间存在很大差距。
我在哪里可以找出延迟?什么在两者之间运行?
答案 0 :(得分:6)
这不是汽车财产。这是一个表达身体的成员。
每次调用属性获取器时,MyProp
计算bool.Parse(Service.Settings["YorN"]);
的实现。因此,在您的情况下,只要调用MyProp
,就会运行该代码,并且每次运行时都会运行该代码。
如果您使用了自动属性,那将是
public bool MyProp {get;} = bool.Parse(Service.Settings["YorN"]);
然后它将在创建实例之后运行,并且在调用构造函数之前运行(当其他字段初始化程序运行时)。请注意,由于此代码在字段初始值设定项中运行,因此无法使用隐式引用(this
),因此如果Service
是实例变量,则无法编译。
答案 1 :(得分:1)
从技术上讲,这是一个表达式身体成员,只有在你试图“获取”财产时才被调用。所以只要它被要求,它就被称为。
相当于:
public bool MyProp
{
get
{
return bool.Parse(Service.Settings["YorN"]);
}
}
答案 2 :(得分:0)
它们没有,属性就像这种情况下的方法,当它们有表达式主体时 - 当你尝试从它们中读取它们的内容时会对它们进行评估。
因此,每当某些东西试图读取MyProp的值时,它就会运行该表达式。
您可能想要做的是将其作为只读属性并在类构造函数中设置它。