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 resourceexpressiongereklidir. Bu Using engelleyicinin denetlediği bir veya daha fazla sistem kaynağının virgülle ayrılmış listesi.
resourceexpression sağlanmıyorsa resourcelistgereklidir. 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 resourcetypelistesi. Bkz. Parametre Listesi.
resourceexpression Gerekli. Gereksinimlerini resourcetypekarşı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 deyimine Using sağlamadan önce tam olarak bir kaynak alabilirsiniz. sağlarsanız resourceexpression, denetimi Using 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 UsingEnd Using deyimler, kaynakların kullanımını temsil eder.

  • Atma, içindeki nesnesinde resourcenameyö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ındaki Using 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 resourcenameNothingç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 Trybir ...Finally yapısı ekleyebilirsiniz. Deyiminin bir kaynağı almada başarılı olmadığı durumu Using işlemeniz gerekiyorsa, olup olmadığını resourcenameNothingtest 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

Ayrıca bkz.