.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