Eri*_*rix 0 c# getter initialization properties
关于我的房产何时被初始化,我有点困惑.
假设我有一个声明如下的属性:
private Dictionary<string, Dictionary<string,string>> MessageLookup
{
get
{
return messages ?? doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
doSomething方法填充消息Dictionary并返回它.
我的问题是,这段代码什么时候运行?如果我在doSomething代码中放置一个断点,它就不会被命中,但是当我在调试器中查看它时,MessageLookup属性正在保存数据(这是它被初始化的唯一地方).
这段代码是在构建时运行的吗?当我将鼠标悬停在变量名称上时,调试器会自动运行吗?如果是这样,为什么断点不会被击中?
只要有人引用该属性,就会运行该代码,而不是之前.
如果您使用调试器,您将看到它,因为调试器尝试自动获取属性值(因此您可以看到对象的状态).我不知道调试器是否在为自己评估属性时忽略了断点 - 这可以解释所有内容.
尝试不在调试器中运行代码,并使一些代码访问您的属性:
var lookup = someObject.MessageLookup;
Run Code Online (Sandbox Code Playgroud)
使doSomething()转储成为堆栈跟踪,您将看到正在发生的事情.
| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |