什么时候做C#自动属性初始化?

时间:2016-11-23 16:55:07

标签: c# asp.net page-lifecycle automatic-properties

在webforms .aspx页面系统中,母版页有一些自动初始化的属性,因此

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

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

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

3 个答案:

答案 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的值时,它就会运行该表达式。

您可能想要做的是将其作为只读属性并在类构造函数中设置它。