共用方式為


在 Visual Basic 中為變數進行疑難排解

更新:2007 年 11 月

本頁列出在 Visual Basic 中使用變數時所發生的一些常見問題。

無法存取物件的成員

如果程式碼嘗試存取物件的屬性 (Property) 或方法,則會有兩種可能的錯誤結果:

  • 如果您宣告物件變數屬於特定型別,然後參考該型別未定義的成員,則編譯器會產生錯誤訊息。

  • 當指派給物件變數的物件未公開 (Expose) 程式碼嘗試存取的成員時,會發生執行階段 MemberAccessException。若為 Object 資料型別的變數,如果成員不是 Public,則您也會收到此例外狀況。這是因為晚期繫結只允許存取 Public 成員。

Option Strict 陳述式將型別檢查設定為 On 時,物件變數僅能存取您用以宣告之類別的方法和屬性。下列範例將說明這點。

Option Strict On
Dim p As Object = New System.Windows.Forms.Label
Dim q As System.Windows.Forms.Label = New System.Windows.Forms.Label
Dim j, k As Integer
' The following statement generates a compiler error.
j = p.Left
' The following statement retrieves the left edge of the label 
' in pixels.
k = q.Left

在此範例中,p 僅能使用 Object 類別本身的成員,其並未包含 Left 屬性。另一方面,將 q 宣告為 Label 型別,如此就可使用 System.Windows.Forms 命名空間內 Label 類別的所有方法和屬性。

正確的處理方法

若要能夠存取特定類別之物件的所有成員,可能的話請宣告物件變數屬於該類別的型別。如果無法這麼做 (例如,在編譯時期不知道物件型別),您必須將 Option Strict 設定為 Off,並宣告變數為 Object 資料型別。這會讓任何型別的物件都可以指派給該變數,而且您應該逐步確定目前指派的物件屬於可接受的型別。您可以使用 TypeOf 運算子 (Visual Basic) 以進行這項決定。

其他元件無法存取您的變數

Visual Basic 名稱是「不區分大小寫」。如果兩個名稱只有字母大小寫不同,則編譯器會將它們解譯成相同的名稱。例如,編譯器會將 ABC 和 abc 視為相同的宣告項目。

不過,Common Language Runtime (CLR) 會使用「區分大小寫」的繫結。因此當您產生一個組件 (Assembly) 或 DLL 讓其他組件使用時,您的名稱將會區分大小寫。例如,如果您使用名為 ABC 的項目來定義類別,而其他組件透過 Common Language Runtime 使用您的類別,則它們必須以 ABC 來表示該項目。如果您隨後重新編譯類別,並將項目的名稱變更為 abc,則其他使用這個類別的組件就無法再存取該項目。因此,當您公佈組件的更新版本時,不應該更改任何公用項目的字母大小寫。

如需詳細資訊,請參閱 Common Language Runtime

正確的處理方法

若要讓其他元件能夠存取您的變數,請將它們的名稱視為要區分大小寫。當您正在測試類別或模組時,請確定其他組件都繫結至想要的變數。一旦發行元件後,請勿修改現有的變數名稱,包括變更大小寫。

使用錯誤的變數

當您有一個以上同名的變數時,Visual Basic 編譯器會嘗試解析該名稱的每項參考。如果變數具有不同的範圍,則編譯器會用最小的範圍來解析宣告的參考。如果範圍相同,則解析會失敗且編譯器會發出錯誤信號。如需詳細資訊,請參閱當多個變數擁有相同名稱時解析參考

正確的處理方法

避免使用具有相同名稱但不同範圍的變數。如果您正在使用其他組件或專案,請盡量避免使用這些外部元件所定義的名稱。如果有一個以上的同名變數,請務必限定它的每項參考。如需詳細資訊,請參閱 HOW TO:區分兩個相同名稱的元素

請參閱

工作

HOW TO:存取物件的成員

HOW TO:決定物件變數參考的型別

概念

Visual Basic 中的變數

Visual Basic 中的變數宣告

Visual Basic 中的物件變數

物件變數宣告

物件變數值

當多個變數擁有相同名稱時解析參考

宣告項目名稱