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.
Deklarálja a blokk elejét Using , és opcionálisan beolvasja a blokk által vezérelhető rendszererőforrásokat.
Szemantika
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 resourcetypelé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ője (GC) minden további kódolás nélkül megsemmisíti. 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
Usingutasí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 azUsingutasí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
UsingEnd 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 Usingutasítás a blokk felügyelete alattUsinglévő erőforrásokat megsemmisíti.
Magatartá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
Megjegyzé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