Dim deyimi (Visual Basic)

Bir veya daha fazla değişken için depolama alanı bildirir ve ayırır.

Sözdizimi

[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist

Parça

  • attributelist

    isteğe bağlı. Bkz. Öznitelik Listesi.

  • accessmodifier

    isteğe bağlı. Aşağıdakilerden biri olabilir:

    Bkz. Visual Basic'te erişim düzeyleri.

  • Shared

    isteğe bağlı. Bkz. Paylaşılan.

  • Shadows

    isteğe bağlı. Bkz. Gölgeler.

  • Static

    isteğe bağlı. Bkz. Statik.

  • ReadOnly

    isteğe bağlı. Bkz. Salt Okunur.

  • WithEvents

    isteğe bağlı. Bunların olay oluşturabilen bir sınıfın örneklerine başvuran nesne değişkenleri olduğunu belirtir. Bkz. WithEvents.

  • variablelist

    Gerekli. Bu deyimde bildirilmekte olan değişkenlerin listesi.

    variable [ , variable ... ]

    Her variable birinin söz dizimi ve bölümleri vardır:

    variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]

    Bölüm Açıklama
    variablename Gerekli. Değişkenin adı. Bkz. Bildirilen Öğe Adları.
    boundslist isteğe bağlı. Bir dizi değişkeninin her boyutunun sınırlarının listesi.
    New isteğe bağlı. deyimi çalıştırıldığında sınıfının yeni bir örneğini Dim oluşturur.
    datatype isteğe bağlı. Değişkenin veri türü.
    With isteğe bağlı. Nesne başlatıcı listesini tanıtır.
    propertyname isteğe bağlı. Örneğini oluşturduğunuz sınıftaki bir özelliğin adı.
    propinitializer = sonrasında propertyname gereklidir. Değerlendirilen ve özellik adına atanan ifade.
    initializer Belirtilmezse New isteğe bağlı. Değişken oluşturulduğunda değerlendirilen ve değişkenine atanan ifade.

Açıklamalar

Visual Basic derleyicisi, değişkenin Dim veri türünü ve değişkene erişebilecek kod gibi diğer bilgileri belirlemek için deyimini kullanır. Aşağıdaki örnek, bir değeri tutmak için bir Integer değişken bildirir.

Dim numberOfStudents As Integer

Herhangi bir veri türünü veya numaralandırma, yapı, sınıf veya arabirimin adını belirtebilirsiniz.

Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form

Bir başvuru türü için anahtar sözcüğünü New kullanarak veri türü tarafından belirtilen sınıfın veya yapının yeni bir örneğini oluşturursunuz. kullanıyorsanız New, başlatıcı ifadesi kullanmazsınız. Bunun yerine, değişkenini oluşturmakta olduğunuz sınıfın oluşturucusunun bağımsız değişkenlerini (gerekirse) sağlarsınız.

Dim bottomLabel As New System.Windows.Forms.Label

Bir yordam, blok, sınıf, yapı veya modülde değişken bildirebilirsiniz. Bir kaynak dosyada, ad alanında veya arabirimde değişken bildiremezsiniz. Daha fazla bilgi için bkz . Bildirim Bağlamları ve Varsayılan Erişim Düzeyleri.

Modül düzeyinde bildirilen bir değişken, herhangi bir yordamın dışında bir üye değişkeni veya alanıdır. Üye değişkenleri sınıf, yapı veya modül boyunca kapsam içindedir. Yordam düzeyinde bildirilen değişken yerel bir değişkendir. Yerel değişkenler yalnızca kendi yordamları veya blokları kapsamındadır.

Aşağıdaki erişim değiştiricileri, bir yordamın dışındaki değişkenleri bildirmek için kullanılır: Public, Protected, Friend, Protected Friendve Private. Daha fazla bilgi için bkz . Visual Basic'te erişim düzeyleri.

Dim anahtar sözcüğü isteğe bağlıdır ve genellikle şu değiştiricilerden birini belirtirseniz atlanır: Public, Protected, Friend, Protected Friend, Private, , Shared, Shadows, StaticReadOnlyveya WithEvents.

Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer

açıksa Option Explicit (varsayılan), derleyici kullandığınız her değişken için bir bildirim gerektirir. Daha fazla bilgi için bkz . Option Explicit Deyimi.

Başlangıç değeri belirtme

Bir değişken oluşturulduğunda değişkene değer atayabilirsiniz. Değer türü için, değişkene atanacak bir ifade sağlamak için başlatıcı kullanırsınız. İfade, derleme zamanında hesaplanabilir bir sabit olarak değerlendirilmelidir.

Dim quantity As Integer = 10
Dim message As String = "Just started"

Başlatıcı belirtilirse ve bir yan tümcesinde As veri türü belirtilmezse, başlatıcıdan veri türünü çıkarsamak için tür çıkarımı kullanılır. Aşağıdaki örnekte hem hem de num1num2 tamsayı olarak kesin olarak yazıldı. İkinci bildirimde tür çıkarımı, türü 3 değerinden çıkartır.

' Use explicit typing.
Dim num1 As Integer = 3

' Use local type inference.
Dim num2 = 3

Tür çıkarımı yordam düzeyinde uygulanır. Bir sınıf, yapı, modül veya arabirimde bir yordamın dışında geçerli değildir. Tür çıkarımı hakkında daha fazla bilgi için bkz . Option Infer Deyimi ve Yerel Tür Çıkarımı.

Veri türü veya başlatıcı belirtilmediğinde ne olacağı hakkında bilgi için bu konunun devamında yer alan Varsayılan Veri Türleri ve Değerler bölümüne bakın.

Adlandırılmış ve anonim türlerin örneklerini bildirmek için bir nesne başlatıcı kullanabilirsiniz. Aşağıdaki kod bir Student sınıfın örneğini oluşturur ve özellikleri başlatmak için bir nesne başlatıcı kullanır.

Dim student1 As New Student With {.First = "Michael",
                                  .Last = "Tucker"}

Nesne başlatıcıları hakkında daha fazla bilgi için bkz. Nasıl yapılır: Nesne Başlatıcı Kullanarak Nesne Bildirme, Nesne Başlatıcılar: Adlandırılmış ve Anonim Türler ve Anonim Türler.

Birden çok değişken bildirme

Bir bildirim deyiminde, her biri için değişken adını belirterek ve her dizi adını parantez içinde izleyerek birkaç değişken bildirebilirsiniz. Birden çok değişken virgülle ayrılır.

Dim lastTime, nextTime, allTimes() As Date

Bir As yan tümcesiyle birden fazla değişken bildirirseniz, bu değişken grubu için başlatıcı sağlayamazsınız.

Bildirdiğiniz her değişken için ayrı bir yan tümce kullanarak farklı değişkenler için farklı As veri türleri belirtebilirsiniz. Her değişken, bölümünden sonra variablename karşılaşılan ilk As yan tümcede belirtilen veri türünü alır.

Dim a, b, c As Single, x, y As Double, i As Integer
' a, b, and c are all Single; x and y are both Double

Diziler

Birden çok değeri tutabilen bir diziyi tutmak için bir değişken bildirebilirsiniz. Bir değişkenin bir diziyi barındıracağını belirtmek için, hemen parantez içinde izleyin variablename . Diziler hakkında daha fazla bilgi için bkz . Diziler.

Bir dizinin her boyutunun alt ve üst sınırlarını belirtebilirsiniz. Bunu yapmak için parantezlerin içine bir boundslist ekleyin. Her boyut için üst boundslist sınırı ve isteğe bağlı olarak alt sınırı belirtir. Alt sınır, belirtseniz de belirtmeseniz de her zaman sıfırdır. Her dizin sıfırdan üst sınır değerine kadar değişebilir.

Aşağıdaki iki deyim eşdeğerdir. Her deyim 21 Integer öğeden oluşan bir dizi bildirir. Diziye eriştiğiniz zaman dizin 0 ile 20 arasında değişebilir.

Dim totals(20) As Integer
Dim totals(0 To 20) As Integer

Aşağıdaki deyim türünde Doubleiki boyutlu bir dizi bildirir. Dizinin her biri 6 sütundan (5 + 1) oluşan 4 satırı (3 + 1) vardır. Üst sınır, boyutun uzunluğunu değil, dizin için mümkün olan en yüksek değeri temsil eder. Boyutun uzunluğu üst sınır artı birdir.

Dim matrix2(3, 5) As Double

Bir dizi 1 ila 32 boyuta sahip olabilir.

Dizi bildiriminde tüm sınırları boş bırakabilirsiniz. Bunu yaparsanız, dizi belirttiğiniz boyut sayısına sahiptir, ancak başlatılmamış olur. Öğelerinin Nothing en az bir bölümünü başlatana kadar değeri vardır. Deyiminin Dim tüm boyutlar için veya hiçbir boyut için sınırları belirtmesi gerekir.

' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)

Dizinin birden fazla boyutu varsa, boyut sayısını belirtmek için ayraçlar arasına virgül eklemeniz gerekir.

Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte

Dizinin boyutlarından birini -1 olarak bildirerek sıfır uzunluklu bir dizi bildirebilirsiniz. Sıfır uzunluklu bir diziyi tutan değişken değeri Nothingyoktur. Belirli ortak dil çalışma zamanı işlevleri için sıfır uzunluklu diziler gereklidir. Böyle bir diziye erişmeye çalışırsanız, çalışma zamanı özel durumu oluşur. Daha fazla bilgi için bkz . Diziler.

Dizi değişmez değeri kullanarak bir dizinin değerlerini başlatabilirsiniz. Bunu yapmak için başlatma değerlerini ayraçlarla ({} çevrelenin.

Dim longArray() As Long = {0, 1, 2, 3}

Çok boyutlu diziler için, her ayrı boyut için başlatma dış boyuttaki küme ayraçları içine alınır. Öğeler birincil satır sırasına göre belirtilir.

Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}

Dizi değişmez değerleri hakkında daha fazla bilgi için bkz . Diziler.

Varsayılan veri türleri ve değerleri

Aşağıdaki tabloda, bir Dim deyimde veri türünü ve başlatıcıyı belirtmenin çeşitli bileşimlerinin sonuçları açıklanmaktadır.

Veri türü belirtildi mi? Başlatıcı belirtildi mi? Örnek Sonuç
Hayır Hayır Dim qty Option Strict kapalıysa (varsayılan), değişkeni olarak Nothingayarlanır.

Açıksa Option Strict , derleme zamanı hatası oluşur.
Hayır Evet Dim qty = 5 Option Infer açıksa (varsayılan), değişken başlatıcının veri türünü alır. Bkz. Yerel Tür Çıkarımı.

kapalıysa ve Option Strict kapalıysa Option Infer değişkeni veri türünü Objectalır.

Kapalı ve Option Strict açıksa Option Infer derleme zamanı hatası oluşur.
Yes Hayır Dim qty As Integer Değişken, veri türü için varsayılan değere başlatılır. Bu bölümün devamında yer alan tabloya bakın.
Yes Yes Dim qty As Integer = 5 Başlatıcının veri türü belirtilen veri türüne dönüştürülemezse, derleme zamanı hatası oluşur.

Bir veri türü belirtir ancak başlatıcı belirtmezseniz, Visual Basic değişkeni veri türü için varsayılan değere başlatır. Aşağıdaki tabloda varsayılan başlatma değerleri gösterilmektedir.

Veri türü Default value
Tüm sayısal türler (ve SBytedahilByte) 0
Char İkili 0
Tüm başvuru türleri (, Stringve tüm diziler dahilObject) Nothing
Boolean False
Date Yılın 1 Ocak 12:00'sinde (01/01/0001 12:00:00)

Bir yapının her öğesi ayrı bir değişkenmiş gibi başlatılır. Bir dizinin uzunluğunu bildirir ancak öğelerini başlatmazsanız, her öğe ayrı bir değişkenmiş gibi başlatılır.

Statik yerel değişken ömrü

Static Yerel değişkenin ömrü, bildirildiği yordamın ömründen daha uzundur. Değişkenin yaşam süresi sınırları, yordamın nerede bildirildiğine ve olup olmadığına Sharedbağlıdır.

Yordam bildirimi Değişken başlatıldı Değişken mevcut olanı durdurur
Modülde Yordam ilk kez çağrılır Programınız yürütmeyi durdurduğunda
Bir sınıfta veya yapıda yordam şu şekildedir: Shared Yordam ilk kez belirli bir örnekte veya sınıf ya da yapının kendisinde çağrılır Programınız yürütmeyi durdurduğunda
Bir sınıfta veya yapıda yordam Shared Yordam belirli bir örnekte ilk kez çağrılır Örnek çöp toplama için serbest bırakıldığında (GC)

Öznitelikler ve değiştiriciler

Öznitelikleri yerel değişkenlere değil yalnızca üye değişkenlere uygulayabilirsiniz. Öznitelik, derlemenin meta verilerine bilgi katkıda bulunur ve bu, yerel değişkenler gibi geçici depolama için anlamlı değildir.

Modül düzeyinde, üye değişkenlerini bildirmek için değiştiriciyi Static kullanamazsınız. Yordam düzeyinde, yerel değişkenleri bildirmek için , Shadows, ReadOnly, , WithEventsveya herhangi bir erişim değiştirici kullanamazsınızShared.

bir sağlayarak bir değişkene hangi kodun accessmodifiererişebileceğini belirtebilirsiniz. Sınıf ve modül üye değişkenleri (herhangi bir yordamın dışında) varsayılan olarak özel erişim, yapı üyesi değişkenleri ise varsayılan olarak genel erişimdir. Erişim değiştiricileri ile erişim düzeylerini ayarlayabilirsiniz. Erişim değiştiricilerini yerel değişkenler üzerinde (bir yordamın içinde) kullanamazsınız.

Bir yordam içindeki yerel değişkenler üzerinde değil, yalnızca üye değişkenlerinde belirtebilirsiniz WithEvents . belirtirseniz WithEvents, değişkenin veri türü değil, belirli bir sınıf türü Objectolmalıdır. ile WithEventsbir dizi bildiremezsiniz. Olaylar hakkında daha fazla bilgi için bkz . Olaylar.

Not

Bir sınıf, yapı veya modülün dışındaki kod, üye değişkeninin adını bu sınıf, yapı veya modülün adıyla nitelemelidir. Bir yordam veya bloğun dışındaki kod, bu yordam veya blok içindeki hiçbir yerel değişkene başvuramaz.

Yönetilen kaynakları serbest bırakma

.NET Framework çöp toplayıcısı, yönetilen kaynakları sizin tarafınıza fazladan kodlama yapmadan atılır. Ancak, çöp toplayıcıyı beklemek yerine yönetilen bir kaynağın elden çıkarılmasına zorlayabilirsiniz.

Bir sınıf özellikle değerli ve kıt bir kaynağı (veritabanı bağlantısı veya dosya tanıtıcısı gibi) barındırıyorsa, artık kullanımda olmayan bir sınıf örneğini temizlemek için bir sonraki çöp toplamaya kadar beklemek istemeyebilirsiniz. Bir sınıf, atık toplamadan önce kaynakları serbest bırakmak için bir yol sağlamak için arabirimini uygulayabilir IDisposable . Bu arabirimi uygulayan bir sınıf, değerli kaynakların hemen serbest bırakılmasına zorlamak için çağrılabilen bir Dispose yöntemi kullanıma sunar.

deyimi Using , bir kaynak alma, bir deyim kümesi yürütme ve ardından kaynağı yok etme işlemini otomatikleştirir. Ancak, kaynağın arabirimi uygulaması IDisposable gerekir. Daha fazla bilgi için bkz . Using Deyimi.

Örnek 1

Aşağıdaki örnek, çeşitli seçeneklerle deyimini Dim kullanarak değişkenleri bildirir.

' Declare and initialize a Long variable.
Dim startingAmount As Long = 500

' Declare a local variable that always retains its value,
' even after its procedure returns to the calling code.
Static totalSales As Double

' Declare a variable that refers to an array.
Dim highTemperature(31) As Integer

' Declare and initialize an array variable that
' holds four Boolean check values.
Dim checkValues() As Boolean = {False, False, True, False}

Örnek 2

Aşağıdaki örnekte 1 ile 30 arasındaki asal sayılar listeilmektedir. Yerel değişkenlerin kapsamı kod açıklamalarında açıklanmıştır.

Public Sub ListPrimes()
    ' The sb variable can be accessed only
    ' within the ListPrimes procedure.
    Dim sb As New System.Text.StringBuilder()

    ' The number variable can be accessed only
    ' within the For...Next block.  A different
    ' variable with the same name could be declared
    ' outside of the For...Next block.
    For number As Integer = 1 To 30
        If CheckIfPrime(number) = True Then
            sb.Append(number.ToString & " ")
        End If
    Next

    Debug.WriteLine(sb.ToString)
    ' Output: 2 3 5 7 11 13 17 19 23 29
End Sub

Private Function CheckIfPrime(ByVal number As Integer) As Boolean
    If number < 2 Then
        Return False
    Else
        ' The root and highCheck variables can be accessed
        ' only within the Else block.  Different variables
        ' with the same names could be declared outside of
        ' the Else block.
        Dim root As Double = Math.Sqrt(number)
        Dim highCheck As Integer = Convert.ToInt32(Math.Truncate(root))

        ' The div variable can be accessed only within
        ' the For...Next block.
        For div As Integer = 2 To highCheck
            If number Mod div = 0 Then
                Return False
            End If
        Next

        Return True
    End If
End Function

Örnek 3

Aşağıdaki örnekte, speedValue değişken sınıf düzeyinde bildirilir. Private anahtar sözcüğü değişkeni bildirmek için kullanılır. değişkenine sınıfındaki Car herhangi bir yordam tarafından erişilebilir.

' Create a new instance of a Car.
Dim theCar As New Car()
theCar.Accelerate(30)
theCar.Accelerate(20)
theCar.Accelerate(-5)

Debug.WriteLine(theCar.Speed.ToString)
' Output: 45
Public Class Car
    ' The speedValue variable can be accessed by
    ' any procedure in the Car class.
    Private speedValue As Integer = 0

    Public ReadOnly Property Speed() As Integer
        Get
            Return speedValue
        End Get
    End Property

    Public Sub Accelerate(ByVal speedIncrease As Integer)
        speedValue += speedIncrease
    End Sub
End Class

Ayrıca bkz.