Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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. Az inicializálási kifejezés típusából a fordító 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
Megjegyzés:
Ha nem szeretné, hogy az előző példában a num2-t Integer-ként gépeljék be, akkor megadhat egy másik típust egy olyan deklarációval, mint például Dim num3 As Object = 3 vagy Dim num4 As Double = 3.
Megjegyzé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ó Option Strict bekapcsolásakor hibát okozna, és num2 kikapcsolásakor ObjectOption Strict-ként osztályozná. Hasonlóképpen, a helyi típusú következtetés nem vonatkozik a deklarált Staticeljárásszintű változókra.
Típus következtetés vs. Késői kötés
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át használja a változó típusának meghatározására fordításkor, hogy korai típusellenőrzésű kódot állítson elő. Az előző példában a num2, mint a num1, gépelve van, mint 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 egy Integer, mert az előző példában someNumbers2 egy egész számokból álló tömb.
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.
pList1 és pList2 mindkettő 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 a Option Infer változónak a kódban, a fordító alapértelmezése a Option Infer On lesz.
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 és Compile Page, Project Designer (Visual Basic).