Using Deyimi (Visual Basic)
Bir Using
bloğun başlangıcını bildirir ve isteğe bağlı olarak bloğun denetlediği sistem kaynaklarını alır.
Sözdizimi
Using { resourcelist | resourceexpression }
[ statements ]
End Using
Parça
Süre | Tanım |
---|---|
resourcelist |
sağlanmıyorsa resourceexpression gereklidir. Bu Using engelleyicinin denetlediği bir veya daha fazla sistem kaynağının virgülle ayrılmış listesi. |
resourceexpression |
sağlanmıyorsa resourcelist gereklidir. Bu Using blok tarafından denetlenecek bir sistem kaynağına başvuran başvuru değişkeni veya ifadesi. |
statements |
isteğe bağlı. Bloğun çalıştığı deyim Using bloğu. |
End Using |
Gerekli. Bloğun Using tanımını sonlandırır ve denetlediğinden tüm kaynakları atılır. |
Bölümdeki resourcelist
her kaynak aşağıdaki söz dizimine ve bölümlere sahiptir:
resourcename As New resourcetype [ ( [ arglist ] ) ]
-veya-
resourcename As resourcetype = resourceexpression
resourcelist Bölümleri
Süre | Tanım |
---|---|
resourcename |
Gerekli. Bloğun denetlediğini bir sistem kaynağına Using başvuran başvuru değişkeni. |
New |
Deyimi kaynağı Using alırsa gereklidir. Kaynağı zaten aldıysanız ikinci söz dizimi alternatifini kullanın. |
resourcetype |
Gerekli. Kaynağın sınıfı. sınıfı arabirimini IDisposable uygulamalıdır. |
arglist |
isteğe bağlı. örneğini oluşturmak için oluşturucuya geçirdiğiniz bağımsız değişkenlerin resourcetype listesi. Bkz. Parametre Listesi. |
resourceexpression |
Gerekli. Gereksinimlerini resourcetype karşılayan bir sistem kaynağına başvuran değişken veya ifade. İkinci söz dizimi alternatifini kullanırsanız, denetimi Using deyimine geçirmeden önce kaynağı almanız gerekir. |
Açıklamalar
Bazen kodunuz dosya tanıtıcısı, COM sarmalayıcısı veya SQL bağlantısı gibi yönetilmeyen bir kaynak gerektirir. Blok Using
, kodunuz tamamlandığında bu tür bir veya daha fazla kaynağın atılması garanti eder. Bu, bunları diğer kodlar için kullanılabilir hale getirir.
Yönetilen kaynaklar, .NET Framework çöp toplayıcısı (GC) tarafından sizin tarafınızdan ek kodlama yapılmadan atılır. Yönetilen kaynaklar için bir Using
engellemeye ihtiyacınız yoktur. Ancak, çöp toplayıcıyı beklemek yerine yönetilen kaynağın elden çıkarılmasına zorlamak için yine de bir blok kullanabilirsiniz Using
.
Bir Using
bloğun üç bölümü vardır: alım, kullanım ve elden çıkarma.
Edinme , bir değişken oluşturma ve bunu sistem kaynağına başvurmak için başlatma anlamına gelir. Deyimi
Using
bir veya daha fazla kaynak alabilir veya bloğu girip deyimineUsing
sağlamadan önce tam olarak bir kaynak alabilirsiniz. sağlarsanızresourceexpression
, denetimiUsing
deyimine geçirmeden önce kaynağı almanız gerekir.Kullanım , kaynaklara erişme ve bunlarla eylem gerçekleştirme anlamına gelir. ve arasındaki
Using
End Using
deyimler, kaynakların kullanımını temsil eder.Atma, içindeki nesnesinde
resourcename
yöntemini çağırmak Dispose anlamına gelir. Bu, nesnesinin kaynaklarını temiz bir şekilde sonlandırmasına olanak tanır.End Using
deyimi, blok denetimi altındakiUsing
kaynakları atılır.
Davranış
BlokUsing
, bloğun kaynakları kullandığı ve Finally
bloğun Try
bunları attığı bir Try
...Finally
yapısı gibi davranır. Bu nedenle blok, Using
blokta nasıl çıksanız da kaynakların atılması garanti eder. İşlenmeyen bir özel durum söz konusu olduğunda bile, bir StackOverflowExceptiondışında bu geçerlidir.
deyimi tarafından alınan her kaynak değişkeninin Using
kapsamı blokla Using
sınırlıdır.
Deyiminde Using
birden fazla sistem kaynağı belirtirseniz, etki, birini başka bir sistem içinde iç içe Using
yerleştirmiş olmanızla aynıdır.
ise resourcename
Nothing
çağrısı Dispose yapılmaz ve özel durum oluşturulur.
Bir Kullanım Bloğu İçinde Yapılandırılmış Özel Durum İşleme
Blok içinde Using
oluşabilecek bir özel durumu işlemeniz gerekiyorsa, içine tam Try
bir ...Finally
yapısı ekleyebilirsiniz. Deyiminin bir kaynağı almada başarılı olmadığı durumu Using
işlemeniz gerekiyorsa, olup olmadığını resourcename
Nothing
test edebilirsiniz.
Using Bloğu Yerine Yapılandırılmış Özel Durum İşleme
Kaynakların alımı üzerinde daha ayrıntılı denetime ihtiyacınız varsa veya blokta Finally
ek koda ihtiyacınız varsa, bloğu bir Try
...Finally
yapısı olarak yeniden yazabilirsinizUsing
. Aşağıdaki örnekte, satın alma ve Using
elden çıkarma ile eşdeğer olan iskelet Try
ve yapılar gösterilmektedirresource
.
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
Not
Bloğun Using
içindeki kod içindeki nesneyi resourcename
başka bir değişkene atamamalıdır. Bloktan Using
çıktığınızda kaynak atılır ve diğer değişken işaret ettiği kaynağa erişemez.
Örnek
Aşağıdaki örnek, log.txt adlı bir dosya oluşturur ve dosyaya iki satır metin yazar. Örnek ayrıca aynı dosyayı okur ve metin satırlarını görüntüler:
TextWriter ve TextReader sınıfları arabirimini uyguladığındanIDisposable, kod yazma ve okuma işlemlerinden sonra dosyanın doğru şekilde kapatılmasını sağlamak için deyimleri kullanabilirUsing
.
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