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ő num1
num2
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 Object
Option Strict
osztályoznánum2
. Hasonlóképpen, a helyi típusú következtetés nem vonatkozik a deklarált Static
eljá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 num2
num1
pé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 String
deklará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 On
kö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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: