Utasítás használata (Visual Basic)
Deklarálja a blokk elejét Using
, és opcionálisan beolvasja a blokk által vezérelhető rendszererőforrásokat.
Syntax
Using { resourcelist | resourceexpression }
[ statements ]
End Using
Részek
Időszak | Definíció |
---|---|
resourcelist |
Kötelező, ha nem ad meg resourceexpression . Egy vagy több olyan rendszererőforrás listája, amelyet ez a Using blokk vezérel, vesszővel elválasztva. |
resourceexpression |
Kötelező, ha nem ad meg resourcelist . Referenciaváltozó vagy kifejezés, amely egy olyan rendszererőforrásra hivatkozik, amelyet ez a Using blokk szabályoz. |
statements |
Opcionális. A blokk futtatására Using vonatkozó utasítások blokkja. |
End Using |
Szükséges. Leállítja a Using blokk definícióját, és megsemmisíti az általa vezérelt összes erőforrást. |
A rész minden erőforrása resourcelist
a következő szintaxist és részeket tartalmazza:
resourcename As New resourcetype [ ( [ arglist ] ) ]
-vagy-
resourcename As resourcetype = resourceexpression
resourcelist Parts
Időszak | Definíció |
---|---|
resourcename |
Szükséges. Referenciaváltozó, amely egy olyan rendszererőforrásra hivatkozik, amelyet a Using blokk vezérel. |
New |
Kötelező, ha az Using utasítás beszerzi az erőforrást. Ha már beszerezte az erőforrást, használja a második szintaxis alternatívát. |
resourcetype |
Szükséges. Az erőforrás osztálya. Az osztálynak implementálnia kell az interfészt IDisposable . |
arglist |
Opcionális. Azon argumentumok listája, amelyeket a konstruktornak ad át egy példány resourcetype létrehozásához. Lásd: Paraméterlista. |
resourceexpression |
Szükséges. Olyan változó vagy kifejezés, amely egy olyan rendszererőforrásra hivatkozik, amely megfelel a következő követelményeknek resourcetype : . Ha a második szintaxis alternatívát használja, az erőforrást be kell szereznie, mielőtt a vezérlőelemet átadta volna az Using utasításnak. |
Megjegyzések
A kód néha nem felügyelt erőforrást, például fájlkezelőt, COM-burkolót vagy SQL-kapcsolatot igényel. A Using
blokkok garantálják egy vagy több ilyen erőforrás elidegenítését, ha a kód elkészült velük. Így más kódhoz is elérhetővé válnak.
A felügyelt erőforrásokat a .NET-keretrendszer szemétgyűjtő (GC) semmisítse meg anélkül, hogy további kódolást alkalmaz az Ön részéről. A felügyelt erőforrásokhoz nincs szükség Using
blokkra. A blokkok Using
használatával azonban továbbra is kényszerítheti a felügyelt erőforrások ártalmatlanítását a szemétgyűjtőre való várakozás helyett.
A Using
blokkok három részből állnak: beszerzés, használat és ártalmatlanítás.
A beszerzés azt jelenti, hogy létrehoz egy változót, és inicializálja azt, hogy a rendszererőforrásra hivatkozzon. Az
Using
utasítás egy vagy több erőforrást is beszerezhet, vagy pontosan egy erőforrást szerezhet be a blokk beírása és az utasításnak valóUsing
átadása előtt. Ha megadja a elemetresourceexpression
, be kell szereznie az erőforrást, mielőtt átadja a vezérlőt azUsing
utasításnak.A használat azt jelenti, hogy hozzáfér az erőforrásokhoz, és műveleteket hajt végre velük. Az erőforrások közötti
Using
End Using
és azok közötti utasítások az erőforrások használatát jelölik.Az elidegenítés azt jelenti, hogy meghívja a Dispose metódust az objektumon a következőben
resourcename
: . Ez lehetővé teszi, hogy az objektum teljesen leállítja az erőforrásait. AzEnd Using
utasítás a blokk felügyelete alattUsing
lévő erőforrásokat megsemmisíti.
Működés
A Using
blokk úgy viselkedik, mint egy Try
...Finally
szerkezet, amelyben a Try
blokk használja az erőforrásokat, és a Finally
blokk megsemmisíti őket. Emiatt a Using
blokk garantálja az erőforrások ártalmatlanítását, függetlenül attól, hogy hogyan lép ki a blokkból. Ez még kezeletlen kivétel esetén is igaz, kivéve a StackOverflowException.
Az utasítás által Using
beszerzett összes erőforrásváltozó hatóköre a Using
blokkra korlátozódik.
Ha egynél több rendszererőforrást ad meg az Using
utasításban, az effektus ugyanaz, mintha egymásba ágyazott blokkokat ágyazott Using
volna be.
Ha resourcename
igen Nothing
, nincs hívás Dispose , és nem történik kivétel.
Strukturált kivételkezelés egy használatblokkon belül
Ha olyan kivételt kell kezelnie, amely a Using
blokkon belül fordulhat elő, hozzáadhat hozzá egy teljes Try
...Finally
konstrukciót. Ha kezelnie kell azt az esetet, amikor az Using
utasítás nem sikerült az erőforrás beszerzésében, tesztelheti, hogy resourcename
az-e Nothing
.
Strukturált kivételkezelés használatblokk helyett
Ha pontosabban kell szabályoznia az erőforrások beszerzését, vagy további kódra van szüksége a Finally
blokkban, átírhatja a Using
blokkot ...Finally
konstrukciókéntTry
. Az alábbi példa azokat a csontvázakat Try
és Using
szerkezeteket mutatja be, amelyek egyenértékűek a beszerzéssel és az elidegenítéssel resource
.
Using resource As New resourceType
' Insert code to work with resource.
End Using
' For the acquisition and disposal of resource, the following
' Try construction is equivalent to the Using block.
Dim resource As New resourceType
Try
' Insert code to work with resource.
Finally
If resource IsNot Nothing Then
resource.Dispose()
End If
End Try
Feljegyzés
A blokkon belüli Using
kód nem rendelheti hozzá az objektumot resourcename
egy másik változóhoz. Amikor kilép a Using
blokkból, az erőforrás törlődik, a másik változó pedig nem tudja elérni azt az erőforrást, amelyre mutat.
Példa
Az alábbi példa egy log.txt nevű fájlt hoz létre, amely két sornyi szöveget ír a fájlba. A példa ugyanezt a fájlt is felolvassa, és megjeleníti a szöveg sorait:
Mivel az és TextReader az TextWriter osztályok implementálják az IDisposable interfészt, a kód utasításokkal biztosíthatjaUsing
, hogy a fájl helyesen legyen lezárva az írási és olvasási műveletek után.
Private Sub WriteFile()
Using writer As System.IO.TextWriter = System.IO.File.CreateText("log.txt")
writer.WriteLine("This is line one.")
writer.WriteLine("This is line two.")
End Using
End Sub
Private Sub ReadFile()
Using reader As System.IO.TextReader = System.IO.File.OpenText("log.txt")
Dim line As String
line = reader.ReadLine()
Do Until line Is Nothing
Console.WriteLine(line)
line = reader.ReadLine()
Loop
End Using
End Sub
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: