共用方式為


本機類型推斷 (Visual Basic)

Visual Basic 編譯程式會使用 類型推斷 來判斷未宣告子 As 句之局部變數的數據類型。 編譯程式會從初始化表達式的類型推斷變數的類型。 這可讓您宣告變數,而不明確指出類型,如下列範例所示。 由於宣告,num1num2 都被強型別為整數。

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub

備註

如果您不想num2在上一個範例中輸入為 Integer,您可以使用 或 Dim num3 As Object = 3之類的Dim num4 As Double = 3宣告來指定另一個類型。

備註

類型推斷只能用於非靜態局部變數;無法用來判斷類別欄位、屬性或函式的類型。

局部類型推斷適用於程式程序層級。 它不能用來在模組層級宣告變數(在類別、結構、模組或介面內,但不在程式或區塊內)。 如果在上一個範例中,num2 是類別的欄位,而不是程序中的區域變數,則在 Option Strict 開啟的情況下,宣告會導致錯誤;而在 num2 關閉時,會將 Object 分類為 Option Strict。 同樣地,本機類型推斷不適用於宣告為 Static的程式層級變數。

類型推斷與延遲綁定

使用型別推斷的程式代碼類似於依賴晚期系結的程序代碼。 不過,類型推斷會將變數強型別化,而不是將它保留為 Object。 編譯程式會使用變數的初始化表達式來判斷變數在編譯時期的類型,以產生早期綁定的程序代碼。 在上一個範例中,num2,像num1一樣,被標記為Integer型別。

早期系結變數的行為與晚期綁定變數的行為不同,此類型只在運行時間才知道。 事先瞭解類型,可讓編譯程式在執行前找出問題、精確地配置記憶體,以及執行其他優化。 早期系結也可讓 Visual Basic 集成開發環境 (IDE) 提供有關對象成員的 IntelliSense 說明。 早期綁定也因效能而受到偏愛。 這是因為儲存在後期綁定變數中的所有數據都必須包裝為Object類型,而且在執行時存取類型成員會使程式變慢。

範例

在沒有 子句和初始化的情況下宣告 As 局部變數時,就會發生類型推斷。 編譯程式會使用指派的初始值類型做為變數的類型。 例如,下列每一行程式代碼都會宣告 類型的 String變數。

' Using explicit typing.
Dim name1 As String = "Springfield"

' Using local type inference.
Dim name2 = "Springfield"

下列程式代碼示範兩種建立整數陣列的等效方式。

' Using explicit typing.
Dim someNumbers1() As Integer = New Integer() {4, 18, 11, 9, 8, 0, 5}

' Using local type inference.
Dim someNumbers2 = New Integer() {4, 18, 11, 9, 8, 0, 5}

使用類型推斷來判斷迴圈控件變數的類型很方便。 在以下程式碼中,編譯程式會推斷numberInteger,因為在上一個範例中,someNumbers2是一個整數陣列。

Dim total = 0
For Each number In someNumbers2
    total += number
Next

Using 語句中,可使用本機類型推斷來建立資源名稱的類型,如下列範例所示。

Using proc = New System.Diagnostics.Process
    ' Insert code to work with the resource.
End Using

變數的類型也可以從函式的傳回值推斷,如下列範例所示。 pList1pList2都是進程陣列,因為Process.GetProcesses會傳回進程陣列。

' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()

' Using local type inference.
Dim pList2 = Process.GetProcesses()

選項推斷

Option Infer 可讓您指定特定檔案中是否允許本機類型推斷。 若要啟用或封鎖選項,請在檔案開頭輸入下列其中一個語句。

Option Infer On

Option Infer Off

如果您未在程式代碼中指定 值 Option Infer ,編譯程式預設值為 Option Infer On

如果檔案中設定 Option Infer 的值與 IDE 或命令行中設定的值發生衝突,則檔案中的值具有優先順序。

如需詳細資訊,請參閱 選項推斷語句編譯頁面、項目設計工具 (Visual Basic)

另請參閱