Helyi típusú következtetés (Visual Basic)

A Visual Basic fordító típuskövetkeztetést használ a záradék nélkül As deklarált helyi változók adattípusainak meghatározásához. A fordító az inicializálási kifejezés típusából következtet a változó típusára. Ez lehetővé teszi a változók deklarálásához a típus explicit megadása nélkül, az alábbi példában látható módon. A deklarációk eredményeként mind a kettő num1num2 egész számként van begépelve.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub

Feljegyzés

Ha nem szeretné num2 , hogy az előző példában begépelje a kívánt típust Integer, megadhat egy másik típust egy deklarációval, például Dim num3 As Object = 3 vagy Dim num4 As Double = 3.

Feljegyzés

A típuskövetkeztetés csak nem statikus helyi változókhoz használható; nem használható osztálymezők, tulajdonságok vagy függvények típusának meghatározására.

A helyi típusú következtetés az eljárás szintjén érvényes. Nem használható változók modulszintű deklarálására (osztályon, struktúrán, modulon vagy felületen belül, de nem eljáráson vagy blokkon belül). Ha num2 az előző példában egy eljárás helyi változója helyett egy osztály mezője lenne, a deklaráció hibát okozna a bekapcsoláskorOption Strict, és kikapcsoltként ObjectOption Strict osztályoznánum2. Hasonlóképpen, a helyi típusú következtetés nem vonatkozik a deklarált Staticeljárásszintű változókra.

Írja be a következtetést és a késői kötést

A típuskövető kód hasonlít a késői kötésre támaszkodó kódra. A típuskövetkeztetés azonban erősen beírja a változót ahelyett, hogy elhagyná.Object A fordító egy változó inicializálójával határozza meg a változó típusát fordításkor a korai kötésű kód létrehozásához. Az előző példában num2num1például a gépelés egy Integer.

A korai kötött változók viselkedése eltér a késői kötött változók viselkedésétől, amelyek esetében a típus csak futásidőben ismert. A típus korai ismerete lehetővé teszi, hogy a fordító azonosítsa a problémákat a végrehajtás előtt, pontosan lefoglalja a memóriát, és egyéb optimalizálásokat hajtson végre. A korai kötés lehetővé teszi, hogy a Visual Basic integrált fejlesztési környezet (IDE) intelliSense-súgót nyújtson egy objektum tagjaival kapcsolatban. A teljesítmény szempontjából előnyben részesítik a korai kötést is. Ennek az az oka, hogy a késő kötött változókban tárolt összes adatot be kell csomagolni típusként Object, és a típus tagjaihoz való hozzáférés futásidőben lassabbá teszi a programot.

Példák

A típuskövetkeztetés akkor következik be, ha egy helyi változót záradék nélkül As deklarálnak és inicializálnak. A fordító a hozzárendelt kezdeti érték típusát használja a változó típusaként. Például az alábbi kódsorok mindegyike egy típusváltozót Stringdeklarál.

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

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

Az alábbi kód két egyenértékű módszert mutat be az egész számok tömbjének létrehozására.

' 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}

A ciklusvezérlő változó típusának meghatározásához célszerű típuskövetkezési következtetést használni. A következő kódban a fordító arra következtet, hogy number ez azért Integer van így, mert someNumbers2 az előző példában egész számokból álló tömb van.

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

A helyi típusú következtetés az utasításokban Using használható az erőforrásnév típusának meghatározásához, ahogyan az az alábbi példában is látható.

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

A változó típusa a függvények visszatérési értékeiből is kikövetkeztethető, ahogy az alábbi példa is mutatja. pList2 Mindkettő pList1 folyamattömb, mert Process.GetProcesses egy folyamattömböt ad vissza.

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

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

Option Infer

Option Infer lehetővé teszi annak megadását, hogy egy adott fájlban engedélyezve van-e a helyi típusú következtetés. A beállítás engedélyezéséhez vagy letiltásához írja be az alábbi utasítások egyikét a fájl elején.

Option Infer On

Option Infer Off

Ha nem ad meg értéket Option Infer a kódban, a fordító alapértelmezett értéke a Option Infer Onkövetkező.

Ha egy fájlban megadott Option Infer érték ütközik az IDE-ben vagy a parancssorban beállított értékkel, a fájlban lévő érték elsőbbséget élvez.

További információ: Option Infer Statement and Compile Page, Project Tervező (Visual Basic).

Lásd még