Bagikan melalui


Pernyataan redup (Visual Basic)

Mendeklarasikan dan mengalokasikan ruang penyimpanan untuk satu atau beberapa variabel.

Sintaksis

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

Bagian

  • attributelist

    Fakultatif. Lihat Daftar Atribut.

  • accessmodifier

    Fakultatif. Dapat berupa salah satu hal berikut:

    Lihat Tingkat akses di Visual Basic.

  • Shared

    Fakultatif. Lihat Dibagikan.

  • Shadows

    Fakultatif. Lihat Bayangan.

  • Static

    Fakultatif. Lihat Statis.

  • ReadOnly

    Fakultatif. Lihat ReadOnly.

  • WithEvents

    Fakultatif. Menentukan bahwa ini adalah variabel objek yang merujuk ke instans kelas yang dapat menaikkan peristiwa. Lihat WithEvents.

  • variablelist

    Dibutuhkan. Daftar variabel yang dideklarasikan dalam pernyataan ini.

    variable [ , variable ... ]

    Setiap variable memiliki sintaks dan bagian berikut:

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

    Bagian Deskripsi
    variablename Dibutuhkan. Nama variabel. Lihat Nama Elemen yang Dideklarasikan.
    boundslist Fakultatif. Daftar batas setiap dimensi variabel array.
    New Fakultatif. Membuat instans baru kelas saat Dim pernyataan berjalan.
    datatype Fakultatif. Jenis data variabel.
    With Fakultatif. Memperkenalkan daftar penginisialisasi objek.
    propertyname Fakultatif. Nama properti di kelas tempat Anda membuat instans.
    propinitializer Diperlukan setelah propertyname =. Ekspresi yang dievaluasi dan ditetapkan ke nama properti.
    initializer Opsional jika New tidak ditentukan. Ekspresi yang dievaluasi dan ditetapkan ke variabel saat dibuat.

Komentar

Pengkompilasi Visual Basic menggunakan Dim pernyataan untuk menentukan jenis data variabel dan informasi lainnya, seperti kode apa yang dapat mengakses variabel. Contoh berikut mendeklarasikan variabel untuk menyimpan Integer nilai.

Dim numberOfStudents As Integer

Anda dapat menentukan jenis data apa pun atau nama enumerasi, struktur, kelas, atau antarmuka.

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

Untuk jenis referensi, Anda menggunakan New kata kunci untuk membuat instans baru kelas atau struktur yang ditentukan oleh jenis data. Jika Anda menggunakan New, Anda tidak menggunakan ekspresi inisialisasi. Sebagai gantinya, Anda menyediakan argumen, jika diperlukan, ke konstruktor kelas tempat Anda membuat variabel.

Dim bottomLabel As New System.Windows.Forms.Label

Anda dapat mendeklarasikan variabel dalam prosedur, blok, kelas, struktur, atau modul. Anda tidak dapat mendeklarasikan variabel dalam file sumber, namespace, atau antarmuka. Untuk informasi selengkapnya, lihat Konteks Deklarasi dan Tingkat Akses Bawaan.

Variabel yang dideklarasikan pada tingkat modul, di luar prosedur apa pun, adalah variabel atau bidanganggota. Variabel anggota berada dalam cakupan di seluruh kelas, struktur, atau modul mereka. Variabel yang dideklarasikan pada tingkat prosedur adalah variabel lokal. Variabel lokal hanya berada dalam cakupan dalam prosedur atau bloknya.

Pengubah akses berikut digunakan untuk mendeklarasikan variabel di luar prosedur: Public, , ProtectedFriend, Protected Friend, dan Private. Untuk informasi selengkapnya, lihat Tingkat akses di Visual Basic.

Kata Dim kunci bersifat opsional dan biasanya dihilangkan jika Anda menentukan salah satu pengubah berikut: Public, FriendProtected, Protected Friend, Private, Shared, Shadows, Static, , ReadOnly, atau WithEvents.

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

Jika Option Explicit aktif (default), pengkompilasi memerlukan deklarasi untuk setiap variabel yang Anda gunakan. Untuk informasi selengkapnya, lihat Opsi Pernyataan Eksplisit.

Menentukan nilai awal

Anda dapat menetapkan nilai ke variabel saat dibuat. Untuk jenis nilai, Anda menggunakan penginisialisasi untuk menyediakan ekspresi yang akan ditetapkan ke variabel. Ekspresi harus mengevaluasi ke konstanta yang dapat dihitung pada waktu kompilasi.

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

Jika penginisialisasi ditentukan dan jenis data tidak ditentukan dalam klausa As , inferensi jenis digunakan untuk menyimpulkan jenis data dari penginisialisasi. Dalam contoh berikut, baik num1 maupun num2 secara ketat ditentukan sebagai bilangan bulat. Dalam deklarasi kedua, inferensi jenis menyimpulkan jenis dari nilai 3.

' Use explicit typing.
Dim num1 As Integer = 3

' Use local type inference.
Dim num2 = 3

Inferensi jenis berlaku pada tingkat prosedur. Ini tidak berlaku di luar prosedur di kelas, struktur, modul, atau antarmuka. Untuk informasi selengkapnya tentang inferensi jenis, lihat Pernyataan Inferensi Opsi dan Inferensi Jenis Lokal.

Untuk informasi tentang apa yang terjadi ketika tipe data atau penginisialisasi tidak ditentukan, lihat Jenis dan Nilai Data Default nanti dalam topik ini.

Anda dapat menggunakan penginisialisasi objek untuk mendeklarasikan instans jenis bernama dan anonim. Kode berikut membuat instans Student kelas dan menggunakan penginisialisasi objek untuk menginisialisasi properti.

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

Untuk informasi selengkapnya tentang penginisialisasi objek, lihat Cara: Mendeklarasikan Objek dengan Menggunakan Penginisialisasi Objek, Penginisialisasi Objek: Jenis Bernama dan Anonim, dan Tipe Anonim.

Mendeklarasikan beberapa variabel

Anda dapat mendeklarasikan beberapa variabel dalam satu pernyataan deklarasi, menentukan nama variabel untuk masing-masing variabel, dan mengikuti setiap nama array dengan tanda kurung. Beberapa variabel dipisahkan oleh koma.

Dim lastTime, nextTime, allTimes() As Date

Jika Anda mendeklarasikan lebih dari satu variabel dengan satu As klausa, Anda tidak dapat menyediakan penginisialisasi untuk grup variabel tersebut.

Anda dapat menentukan jenis data yang berbeda untuk variabel yang berbeda dengan menggunakan klausul terpisah As untuk setiap variabel yang Anda deklarasikan. Setiap variabel mengambil jenis data yang ditentukan dalam klausul pertama As yang ditemui setelah bagiannya variablename .

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

Larik

Anda dapat mendeklarasikan variabel untuk menyimpan array, yang dapat menyimpan beberapa nilai. Untuk menentukan bahwa variabel menyimpan array, ikuti variablename dengan tanda kurung segera. Untuk informasi selengkapnya tentang Arrays, lihat Arrays.

Anda dapat menentukan batas bawah dan atas dari setiap dimensi array. Untuk melakukan ini, sertakan boundslist di dalam tanda kurung. Untuk setiap dimensi, boundslist menentukan batas atas dan secara opsional batas bawah. Batas bawah selalu nol, apakah Anda menentukannya atau tidak. Setiap indeks dapat bervariasi dari nol melalui nilai terikat atasnya.

Dua pernyataan berikut setara. Setiap pernyataan mendeklarasikan array 21 Integer elemen. Saat Anda mengakses array, indeks dapat bervariasi dari 0 hingga 20.

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

Pernyataan berikut mendeklarasikan array Doubletipe dua dimensi . Array memiliki masing-masing 4 baris (3 + 1) dari 6 kolom (5 + 1). Perhatikan bahwa batas atas mewakili nilai tertinggi yang mungkin untuk indeks, bukan panjang dimensi. Panjang dimensi adalah batas atas ditambah satu.

Dim matrix2(3, 5) As Double

Array dapat memiliki dari 1 hingga 32 dimensi.

Anda dapat membiarkan semua batas kosong dalam deklarasi array. Jika Anda melakukan ini, array memiliki jumlah dimensi yang Anda tentukan, tetapi tidak diinisialisasi. Ini memiliki nilai Nothing sampai Anda menginisialisasi setidaknya beberapa elemennya. Pernyataan Dim harus menentukan batas baik untuk semua dimensi atau tanpa dimensi.

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

Jika array memiliki lebih dari satu dimensi, Anda harus menyertakan koma di antara tanda kurung untuk menunjukkan jumlah dimensi.

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

Anda dapat mendeklarasikan array panjang nol dengan mendeklarasikan salah satu dimensi array menjadi -1. Variabel yang menyimpan array panjang nol tidak memiliki nilai Nothing. Array dengan panjang nol diperlukan oleh fungsi runtime bahasa umum tertentu. Jika Anda mencoba mengakses array seperti itu, pengecualian runtime terjadi. Untuk informasi selengkapnya, lihat Array.

Anda dapat menginisialisasi nilai array dengan menggunakan array literal. Untuk melakukan ini, kelilingi nilai inisialisasi dengan kurung kurawal ({}).

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

Untuk array multidireksional, inisialisasi untuk setiap dimensi terpisah diapit kurung kurawal di dimensi luar. Elemen ditentukan dalam urutan baris-utama.

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

Untuk informasi selengkapnya tentang array literal, lihat Array.

Jenis dan nilai data default

Tabel berikut ini menjelaskan hasil berbagai kombinasi menentukan jenis data dan penginisialisasi dalam pernyataan Dim .

Jenis data yang ditentukan? Inisialisasi ditentukan? Contoh Hasil
Tidak. Tidak. Dim qty Jika Opsi Ketat nonaktif (default), variabel diatur ke Nothing.

Jika Option Strict aktif, terjadi kesalahan waktu kompilasi.
Tidak. Ya Dim qty = 5 Jika Infer Opsi aktif (default), variabel mengambil jenis data penginisialisasi. Lihat Inferensi Jenis Lokal.

Jika Option Infer nonaktif dan Option Strict nonaktif, variabel mengambil jenis data .Object

Jika Option Infer nonaktif dan Option Strict aktif, kesalahan waktu kompilasi terjadi.
Ya Tidak. Dim qty As Integer Variabel diinisialisasi ke nilai default untuk jenis data. Lihat tabel nanti di bagian ini.
Ya Ya Dim qty As Integer = 5 Jika jenis data penginisialisasi tidak dapat dikonversi ke jenis data yang ditentukan, kesalahan waktu kompilasi terjadi.

Jika Anda menentukan jenis data tetapi tidak menentukan penginisialisasi, Visual Basic menginisialisasi variabel ke nilai default untuk jenis datanya. Tabel berikut ini memperlihatkan nilai inisialisasi default.

Jenis data Nilai standar
Semua jenis numerik (termasuk Byte dan SByte) 0
Char Biner 0
Semua jenis referensi (termasuk Object, String, dan semua array) Nothing
Boolean False
Date 12:00 PAGI 1 Januari tahun 1 (01/01/0001 12:00:00 AM)

Setiap elemen struktur diinisialisasi seolah-olah itu adalah variabel terpisah. Jika Anda mendeklarasikan panjang array tetapi tidak menginisialisasi elemennya, setiap elemen diinisialisasi seolah-olah itu adalah variabel terpisah.

Masa pakai variabel lokal statis

Variabel Static lokal memiliki masa pakai yang lebih lama daripada prosedur di mana variabel tersebut dideklarasikan. Batas masa pakai variabel tergantung pada di mana prosedur dideklarasikan dan apakah itu Shared.

Deklarasi prosedur Variabel diinisialisasi Variabel berhenti ada
Dalam modul Untuk pertama kali suatu prosedur dipanggil Ketika program Anda menghentikan eksekusi
Di kelas atau struktur, prosedurnya adalah Shared Pertama kali prosedur dipanggil baik pada instans tertentu atau pada kelas atau struktur itu sendiri Ketika program Anda menghentikan eksekusi
Di kelas atau struktur, prosedur tidak Shared Pertama kali prosedur dipanggil pada instans tertentu Ketika instans dirilis untuk pengumpulan sampah (GC)

Atribut dan pengubah

Anda hanya dapat menerapkan atribut ke variabel anggota, bukan ke variabel lokal. Atribut menyumbangkan informasi ke metadata perakitan, yang tidak bermakna untuk penyimpanan sementara seperti variabel lokal.

Pada tingkat modul, Anda tidak dapat menggunakan pengubah Static untuk mendeklarasikan variabel anggota. Pada tingkat prosedur, Anda tidak dapat menggunakan Shared, , ShadowsReadOnly, WithEvents, atau pengubah akses apa pun untuk mendeklarasikan variabel lokal.

Anda dapat menentukan kode apa yang dapat mengakses variabel dengan menyediakan accessmodifier. Variabel anggota kelas dan modul (di luar prosedur apa pun) default ke akses privat, dan variabel anggota struktur default ke akses publik. Anda dapat menyesuaikan tingkat aksesnya dengan pengubah akses. Anda tidak dapat menggunakan pengubah akses pada variabel lokal (di dalam prosedur).

Anda hanya dapat menentukan WithEvents pada variabel anggota, bukan pada variabel lokal di dalam prosedur. Jika Anda menentukan WithEvents, jenis data variabel harus merupakan jenis kelas tertentu, bukan Object. Anda tidak dapat mendeklarasikan array dengan WithEvents. Untuk informasi selengkapnya tentang peristiwa, lihat Peristiwa.

Nota

Kode di luar kelas, struktur, atau modul harus memenuhi syarat nama variabel anggota dengan nama kelas, struktur, atau modul tersebut. Kode di luar prosedur atau blok tidak dapat merujuk ke variabel lokal apa pun dalam prosedur atau blok tersebut.

Merilis sumber daya terkelola

Pengumpul sampah .NET Framework membuang sumber daya terkelola tanpa pengkodan tambahan di bagian Anda. Namun, Anda dapat memaksa pembuangan sumber daya terkelola alih-alih menunggu pengumpul sampah.

Jika kelas menyimpan sumber daya yang sangat berharga dan langka (seperti koneksi database atau handel file), Anda mungkin tidak ingin menunggu hingga pengumpulan sampah berikutnya untuk membersihkan instans kelas yang tidak lagi digunakan. Kelas dapat mengimplementasikan IDisposable antarmuka untuk menyediakan cara untuk melepaskan sumber daya sebelum pengumpulan sampah. Kelas yang mengimplementasikan antarmuka tersebut mengekspos Dispose metode yang dapat dipanggil untuk memaksa sumber daya berharga segera dirilis.

Pernyataan ini Using mengotomatiskan proses memperoleh sumber daya, menjalankan serangkaian pernyataan, lalu membuang sumber daya. Namun, sumber daya harus mengimplementasikan IDisposable antarmuka. Untuk informasi selengkapnya, lihat Pernyataan Using.

Contoh 1

Contoh berikut mendeklarasikan variabel dengan menggunakan Dim pernyataan dengan berbagai opsi.

' 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}

Contoh 2

Contoh berikut mencantumkan angka utama antara 1 dan 30. Cakupan variabel lokal dijelaskan dalam komentar kode.

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

Contoh 3

Dalam contoh berikut, speedValue variabel dideklarasikan pada tingkat kelas. Kata Private kunci digunakan untuk mendeklarasikan variabel. Variabel dapat diakses oleh prosedur apa pun di Car kelas .

' 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

Lihat juga