【发布时间】:2011-01-18 15:14:37
【问题描述】:
所以我从一位同事那里收到一条惊慌的即时消息,说这个 if 语句正在跳过时
If true Then
DoSomething
End IF
实际代码是
If MyBase.IsDirty Then
DoSomething
End IF
C#版本
if(base.IsDirty)
{
DoSomething();
}
我对他们的第一个问题是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
在哪里
<Browsable(False)> _
Public Overridable ReadOnly Property IsSelfDirty() As Boolean Implements IEditableBusinessObject.IsSelfDirty
Get
Return _isDirty
End Get
End Property
还有
_isDirty 被初始化为真
(对于这种情况,现场经理不是问题)。
我应该注意,这一切都取自 CSLA 3.5.3.0
另一个编辑
我之所以打电话给 MyBase.IsDirty,是因为 Rocky Lhotka 在他关于 CSLA 的书中表明这是这样做的。
【问题讨论】:
-
IsDirty的类型是什么? -
如果
MyBase是一个属性,那么看看Get是如何完成的会很有用。 -
@Justin:从他发布的代码来看,这似乎是
Boolean。同意@Shimrod;请发布您的IsDirty财产。顺便说一句,你为什么打电话给MyBase.IsDirty而不是IsDirty?您是否在当前类中覆盖它并且想要绕过该逻辑? -
@Adam Robinson 看到编辑,@Shimrod 在编辑中,@Justin 是的......
-
@CodeInChaos,请详细说明答案,这正是我想要的类型。
标签: .net visual-studio debugging virtual