我是vb的新手。当我开始在vb.net 2010中开始研究这个新项目时,我提出了许多断点来试图理解项目的执行顺序,但却发现它是徒劳的。
步入命令 F11 应该根据Step Into Property/Function (F11) doesn't work as expected正常工作。但是当我按 F11 时,我发现代码是基于断点从一个地方跳到另一个地方,而不是逐行或逐步。
举个例子,请看下面的代码
Me.tcData.Alignment = TabStrip.TabControl.TabAlignment.Bottom 'line 1-breakpoint
Me.tcData.Dock = System.Windows.Forms.DockStyle.Fill 'line 2
...
Me.tcData.TabsDirection = TabStrip.TabControl.FlowDirection.LeftToRight 'line 3
Public Property Alignment() As TabAlignment 'The property 1 called by line 1
Get
Return m_Alignment
End Get
Set(ByVal value As TabAlignment)
m_Alignment = value
AdjustHeight()
PositionButtons()
For Each t As TabPage In TabPages
t.Alignment = value
Next
End Set
End Property
Public Property TabsDirection() As FlowDirection 'The property 3 -breakpoint
Get
Return m_TabsDirection
End Get
Set(ByVal value As FlowDirection)
m_TabsDirection = value
SelectItem(Nothing)
End Set
End Property
当我在第1行按 F11 时,它会转到属性1.返回后,当我按 F11 时,它会直接转到属性3,而不会访问第2行和第3行的代码。
我不明白为什么不使用 F11 逐步执行代码。如果我在第2行放置breakpoingts,则执行第2行。
所以在我看来,显示的执行顺序是基于断点的!因此,如果我在不同的地方放置断点,显示的执行顺序会有所不同!因此,我不可能真正理解执行顺序。
谢谢!
答案 0 :(得分:0)
当您告诉Step Into
时,它会遵循确切的代码路径。因此,为了计算第一行中的TabStrip.TabControl.TabAlignment.Bottom
,首先必须引用TabStrip
,然后查找TabControl
属性,然后查找TabAlignment
属性,然后 - 这是跳到属性1标签的地方,对吧?那是因为它必须在代码中为Get
属性执行TabAlignment
部分。一旦执行它,它就知道引用是什么,因此它返回到先前的执行级别,此时它可以查找Bottom
属性。现在,它可以将值分配给Me.tcData.Alignment
属性。
第3行也是如此:为了知道它在哪里分配TabStrip.TabControl.FlowDirection.LeftToRight
,它必须评估Me.tcData.TabsDirection
属性,这涉及在Get
部分执行代码您的TabsDirection
财产。
因此,简而言之,您将看到代码所遵循的确切执行路径,包括为计算“源”和“目标”属性而必须执行的所有“子评估”。根据调试器配置,它可能不会为系统代码显示此信息,但如果将调试器设置为尽可能详细,则会跳转到您引用的每个属性的Get
定义,包括系统代码。 System.Windows.Forms.DockStyle.Fill
有5个属性查找,只是将它分配给局部变量。