今天遇到了一个很奇怪的问题, 就是当我设定一个私有变量的值时,不管是硬性赋值给它,还是用快速监查器去设定它的值,设定完后,都还会保持原值,原因是什么呢, 且听我慢慢道来
一段式:
using System;
namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
private bool _a = true;
public bool OriginalA
{
get
{
_a = true;
return _a;
}
}
public void SetAFalse()
{
_a = false;
Console.Write(_a);
}
/// <summary>
/// 应用程序的主入口点。
/// </summary>
///
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Class1 test = new Class1();
test.SetAFalse();
}
}
}
using System;
namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
private bool _a = true;
public bool OriginalA
{
get
{
_a = true;
return _a;
}
}
public void SetAFalse()
{
_a = false;
Console.Write(_a);
}
/// <summary>
/// 应用程序的主入口点。
/// </summary>
///
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Class1 test = new Class1();
test.SetAFalse();
}
}
}
如果我在SetAFalse()函数内的_a=false设一段点,然后再添加两个变量监视_a和OriginalA, 你会看见,当执行完_a=false之后,在监视器中的_a仍然会是true,原因何在呢?
这是因为当执行完_a=false之后,监视器为刷新现有值,将会执行一遍OrignalA以获取其值,而在OriginalA又会再次设_a为true,所以_a又会变回true.
这个问题是我们弄了好久之后才发现的,这个问题实在是存在着危险,因为当我们添加变量监视的时候,常常会认为我们仅仅是获取值,不会改变其它任何东西,而现在变成会改变其他变量的值,这一点将让调试加大了困难.
为此,我建议以后不要再去监视属性的值,而改作仅监视变量值.