2 回答

TA貢獻(xiàn)1824條經(jīng)驗 獲得超5個贊
該范圍取決于在哪里聲明一個變量。您可能錯過了瀏覽鏈接的內(nèi)容 - 每個范圍級別摘要都包含聲明它的短語。
現(xiàn)在看看你的構(gòu)造函數(shù):
Public Sub New(ByRef thisEquip As classEquipment)
thisEquip
被聲明為構(gòu)造函數(shù)的參數(shù)。因此,它只存在于該程序中。程序采用的形式或thisEquip
形式(或模塊或其他任何形式)中提到的事實是偶然的。雖然構(gòu)造函數(shù)確實在幾個方面是特殊的,但在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
在表單級別聲明,它具有表單/類級別范圍。您現(xiàn)在myEquip
可以在表單中的任何位置引用或myImgs。 僅在將某些內(nèi)容分配給表單級對象時不要使用 Dim
- 它將創(chuàng)建一個新的本地但名稱相同的變量。
其他常見范圍級別:
程序級別范圍
Private myFoo as Int32Private Sub DoSomething() Dim myBar As String myBar = "Ziggy" ... Dim myFoo As Int32 = 7End Sub
這通常稱為本地范圍。我正在使用程序級別,因為它與其他術(shù)語進(jìn)行了比較和對比。
myBar
在DoSomething
方法中聲明,因此它具有過程級別范圍 - 它只存在于該方法中。試圖在別處使用它會導(dǎo)致錯誤。這類似于上面的構(gòu)造函數(shù)示例,主要區(qū)別在于thisEquip
對象作為參數(shù)傳遞而不是在本地聲明。
這導(dǎo)致一些人感到困惑:Dim myFoo
方法中聲明(創(chuàng)建!)一個新的,僅本地myFoo
變量,它與同名的Form / Class級別變量無關(guān)。本地版本遮蔽了另一個版本。對此的一些困惑似乎是有些人認(rèn)為他們需要(重新)使用Dim
它們才能使用變量。你不。
塊級范圍
直接來自MSDN:
If n < 1291 Then Dim cube As Integer cube = n ^ 3End If
相當(dāng)數(shù)量的VB語句創(chuàng)建了一個塊范圍(For Each
/ Next
,If
/ End If
和Using
/ End Using
)。在塊內(nèi)聲明的變量,其范圍僅限于該塊?;旧?,(幾乎)任何導(dǎo)致縮進(jìn)的內(nèi)容都會創(chuàng)建一個塊范圍。
Private Sub ..... Dim cube As Int32 If n < 1291 Then cube = n ^ 3 End If
現(xiàn)在,cube
可以在過程的其他地方使用:它的范圍已從Block更改為Local。
有關(guān)更多詳細(xì)信息,請參閱MSDN:
- Visual Basic中的范圍
- 值類型與引用類型

TA貢獻(xiàn)1836條經(jīng)驗 獲得超3個贊
那講得通; 我的問題是我錯誤地認(rèn)為構(gòu)造函數(shù)的范圍在它處于活動狀態(tài)時應(yīng)用于該表單對象。我通過了ThisEquip byRef,因為我想對它進(jìn)行更改; 但現(xiàn)在我正在對myEquip應(yīng)用更改。有沒有比在構(gòu)造函數(shù)中傳遞thisEquip byRef更好的地方?
- 2 回答
- 0 關(guān)注
- 389 瀏覽
添加回答
舉報