Mar*_*ols 4 c# debugging getter field properties
我最近正在处理一些带有属性的代码,该属性暴露了一个被动更新/创建的字段,只有在获取它时并且某些标志表明该字段需要更新。这是代码:
static void Main(string[] args)
{
var someClass = new SomeClass();
Console.WriteLine(someClass.ClassString);
Console.ReadKey();
}
class SomeClass
{
private bool _dirtyFlag;
private String _classString;
public String ClassString
{
get
{
Console.WriteLine("dirty flag value in getter: " + _dirtyFlag);
Console.WriteLine("_classString value in getter: " + _classString);
if (_dirtyFlag)
{
_classString = "new value";
_dirtyFlag = false;
}
return _classString;
}
}
public SomeClass()
{
SetDirtyFlag();
Console.WriteLine("dirty flag value in constructor: " + _dirtyFlag);
Console.WriteLine("_classString value in constructor: " + _classString);
}
public void SetDirtyFlag()
{
_dirtyFlag = true;
}
}
Run Code Online (Sandbox Code Playgroud)
在调试代码时,我发现了一些奇怪的行为:标志值自动从 true 设置为 false,并且即使未调用ClassString , _classString也会更新(不知何故,从代码以外的其他地方调用了 getter)。此外,在ClassString getter中设置断点不会显示第一次调用 getter 的时间(这不是我的代码中的调用)。我会得到如下输出:
dirty flag value in getter: True
_classString value in getter:
dirty flag value in constructor: False
_classString value in constructor: new value
dirty flag value in getter: False
_classString value in getter: new value
new value
Run Code Online (Sandbox Code Playgroud)
是什么导致了这种奇怪的行为?谁在我的代码调用 getter 之前调用 getter?
调试器在您的代码之前调用您的 getter 代码。
调试代码时,仅当您检查ClassString的值时(当该变量在 Visual Studio 的“本地”窗口中可见时),Visual Studio 才会尝试获取变量的值以在调试窗口中显示它们。然后在这种情况下,将调用 getter,并根据您的代码更新您的变量。
还值得注意的是,如果存在断点,来自调试器的 getter 调用不会停止,因为断点仅适用于主执行线程。换句话说,代码的调试器调用会忽略断点。
归档时间: |
|
查看次数: |
468 次 |
最近记录: |