.net MyBase(base)对象属性未在调试器中显示实际值

.net MyBase(base)对象属性未在调试器中显示实际值,.net,visual-studio,debugging,virtual,.net,Visual Studio,Debugging,Virtual,所以我收到一个同事发来的惊慌失措的即时通讯,他说如果在 If true Then DoSomething End IF 实际代码是 If MyBase.IsDirty Then DoSomething End IF C版本 我向他们提出的第一个问题是,If语句没有神奇地被破坏,那么你确定MyBase.IsDirty是真的吗?他们回答说:“当然可以!”。在询问他们如何确定这一点时,他们说他们在该行上放置了一个断点,并将鼠标悬停在MyBase.IsDirty上,查看该值是什么,并

所以我收到一个同事发来的惊慌失措的即时通讯,他说如果在

If true Then
    DoSomething
End IF
实际代码是

If MyBase.IsDirty Then
    DoSomething
End IF
C版本

我向他们提出的第一个问题是,
If
语句没有神奇地被破坏,那么你确定
MyBase.IsDirty
是真的吗?他们回答说:“当然可以!”。在询问他们如何确定这一点时,他们说他们在该行上放置了一个断点,并将鼠标悬停在
MyBase.IsDirty
上,查看该值是什么,并且他们也在即时窗口中执行了
?MyBase.IsDirty
。我最初的想法和我现在认为仍然正确的想法是由于基类的工作方式,在这些情况下它实际上没有显示值(至少是正确的),所以我建议这样做

Dim dirty As Boolean=MyBase.IsDirty

然后再次运行代码,这表明我猜dirty实际上是
false

为什么会这样?据我所知,这与MyBase的实现方式有关,但我想了解具体情况,以便对此有一个100%的答案

编辑

对,因此
MyBase.IsDirty
是一个布尔值

Get的操作如下所示:

<Browsable(False)> _
    Public Overridable ReadOnly Property IsDirty() As Boolean Implements IEditableBusinessObject.IsDirty
      Get
        Return IsSelfDirty OrElse (_fieldManager IsNot Nothing AndAlso FieldManager.IsDirty())
      End Get
    End Property
_
作为布尔值的公共可重写只读属性IsDirty()实现IEditableBusinessObject.IsDirty
得到
返回IsSelfDirty OrElse(_fieldManager不是Nothing,也不是fieldManager.IsDirty())
结束
端属性
在哪里

<Browsable(False)> _
    Public Overridable ReadOnly Property IsSelfDirty() As Boolean Implements IEditableBusinessObject.IsSelfDirty
      Get
        Return _isDirty
      End Get
    End Property
_
公共可重写只读属性IsSelfDirty()作为布尔值实现IEditableBusinessObject.IsSelfDirty
得到
返回值
结束
端属性

\u isDirty
初始化为true

(在这种情况下,现场经理不是问题)

我应该注意到,这些都来自CSLA 3.5.3.0

另一次编辑


我给MyBase.IsDirty打电话是因为
Rocky Lhotka
在他关于CSLA的书中显示了这一点

调试器无法正确使用
base
(或VB中的
MyBase
)关键字计算表达式,因为调试API不支持非虚拟调用。它返回对getter的虚拟调用返回的值,而不是基类中getter返回的值。因此,您观察到的效果是一个调试器问题

我猜您重写了派生类中的属性,并在那里返回
false
,这就是调试器显示的内容。编译后的代码本身将正确处理
基。
调用


MSDN博客条目详细描述了这个问题。

IsDirty的类型是什么??如果
MyBase
是一个属性,那么查看
获取
是如何完成的可能会很有用。@Justin:从他发布的代码来看,它似乎是一个
布尔值。同意@Shimrod;请发布您的
IsDirty
属性。顺便问一下,为什么要调用
MyBase.IsDirty
,而不是只调用
IsDirty
?你是否在当前类中重写它,并想绕过该逻辑?@Adam Robinson查看编辑,@Shimrod在编辑中,@Justin yes…@CodeInChaos,请在回答中详细说明这正是我想要的类型。这是我的想法,但我找不到任何具体/官方的内容。@msarchet找到了msdn博客
<Browsable(False)> _
    Public Overridable ReadOnly Property IsSelfDirty() As Boolean Implements IEditableBusinessObject.IsSelfDirty
      Get
        Return _isDirty
      End Get
    End Property