代码之家  ›  专栏  ›  技术社区  ›  Rawling isekaijin

为什么VS2005调试器没有正确报告“base.”值?(是否为“这是为什么,如果声明失败?“”

  •  0
  • Rawling isekaijin  · 技术社区  · 15 年前

    我正在处理一个现有类,它是从System.Windows.Forms.Combo Box派生的两个步骤。

    类重写文本属性,因此:

        public override string Text
        {
            get
            {
                return this.AccessibilityObject.Value;
            }
            set
            {
                if (base.Text != value)
                {
                    base.Text = value;
                }
            }
        }
    

    “获取”的原因是MS错误: http://support.microsoft.com/kb/814346

    不过,我更感兴趣的是“如果”不起作用。

    有时候“base.text!=value“为真,但按F10直接到“set”的结束,文本属性不会更改。

    我已经看到了这两种情况,一种是在调试器中检查值,另一种是在“if”语句的谓词为真时在其上放置一个条件断点。

    “如果”到底怎么可能出错?

    此和组合框之间的类不接触文本属性。上面的bug不应该真正影响任何东西——它说它在VS2005中被修复了。调试器显示的值是否与程序本身看到的值不同?

    更新

    我想我已经发现这里发生了什么。

    调试器报告的值不正确(包括不正确地计算条件断点)。要查看此信息,请尝试以下两个类:

    class MyBase
    {
        virtual public string Text
        {
            get
            {
                return "BaseText";
            }
        }
    }
    
    class MyDerived : MyBase
    {
        public override string Text
        {
            get
            {
                string test = base.Text;
                return "DerivedText";
            }
        }
    }
    

    在最后一条返回语句上放置一个断点,然后运行代码并访问该属性。

    在我的VS2005中,将鼠标悬停在base.text上会给出值“derivedtext”,但变量测试已正确设置为“basetext”。

    所以,新的问题是:为什么调试器不能正确地处理基函数,我如何才能处理它?

    2 回复  |  直到 15 年前
        1
  •  3
  •   CAbbott    15 年前

    使用 String.Compare 用于比较字符串。字符串有一些微妙之处。我不能告诉你为什么如果失败了,除了你的弦可能不是真的“相等”

        2
  •  0
  •   Rawling isekaijin    15 年前

    …和 this 就要结束我的新问题了。啊,好吧。

    推荐文章