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"]);
}
}
在网络表单 .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"]);
}
}