2 回答
TA贡献1824条经验 获得超5个赞
该范围取决于在哪里声明一个变量。您可能错过了浏览链接的内容 - 每个范围级别摘要都包含声明它的短语。
现在看看你的构造函数:
Public Sub New(ByRef thisEquip As classEquipment)
thisEquip
被声明为构造函数的参数。因此,它只存在于该程序中。程序采用的形式或thisEquip
形式(或模块或其他任何形式)中提到的事实是偶然的。虽然构造函数确实在几个方面是特殊的,但在Scope的问题上,它只是另一个过程。
表格级别范围
保存对其的引用以供其他地方使用:
Public Class Form1 ' declare a variable to hold the reference Private myEquip As classEquipment ' declare an array Private myImgs As Image() Public Sub New(ByRef thisEquip As classEquipment) InitializeComponent() ... myEquip = thisEquip ' assign param to the var ' assign array of images to the Form level var ' via a temp array myImgs = New Image() {My.Resources.add, My.Resources.ballblack, My.Resources.ballblue, My.Resources.ballgreen} End Sub
在表单级别声明,它具有表单/类级别范围。您现在myEquip
可以在表单中的任何位置引用或myImgs。 仅在将某些内容分配给表单级对象时不要使用 Dim
- 它将创建一个新的本地但名称相同的变量。
其他常见范围级别:
程序级别范围
Private myFoo as Int32Private Sub DoSomething() Dim myBar As String myBar = "Ziggy" ... Dim myFoo As Int32 = 7End Sub
这通常称为本地范围。我正在使用程序级别,因为它与其他术语进行了比较和对比。
myBar
在DoSomething
方法中声明,因此它具有过程级别范围 - 它只存在于该方法中。试图在别处使用它会导致错误。这类似于上面的构造函数示例,主要区别在于thisEquip
对象作为参数传递而不是在本地声明。
这导致一些人感到困惑:Dim myFoo
方法中声明(创建!)一个新的,仅本地myFoo
变量,它与同名的Form / Class级别变量无关。本地版本遮蔽了另一个版本。对此的一些困惑似乎是有些人认为他们需要(重新)使用Dim
它们才能使用变量。你不。
块级范围
直接来自MSDN:
If n < 1291 Then Dim cube As Integer cube = n ^ 3End If
相当数量的VB语句创建了一个块范围(For Each
/ Next
,If
/ End If
和Using
/ End Using
)。在块内声明的变量,其范围仅限于该块。基本上,(几乎)任何导致缩进的内容都会创建一个块范围。
Private Sub ..... Dim cube As Int32 If n < 1291 Then cube = n ^ 3 End If
现在,cube
可以在过程的其他地方使用:它的范围已从Block更改为Local。
有关更多详细信息,请参阅MSDN:
- Visual Basic中的范围
- 值类型与引用类型
TA贡献1836条经验 获得超3个赞
那讲得通; 我的问题是我错误地认为构造函数的范围在它处于活动状态时应用于该表单对象。我通过了ThisEquip byRef,因为我想对它进行更改; 但现在我正在对myEquip应用更改。有没有比在构造函数中传递thisEquip byRef更好的地方?
- 2 回答
- 0 关注
- 357 浏览
添加回答
举报