Bagikan melalui


Properti dan metode yang kelebihan beban (Visual Basic)

Kelebihan beban adalah pembuatan lebih dari satu prosedur, konstruktor instans, atau properti di kelas dengan nama yang sama tetapi jenis argumen yang berbeda.

Penggunaan kelebihan beban

Kelebihan beban sangat berguna ketika model objek Anda menentukan bahwa Anda menggunakan nama yang identik untuk prosedur yang beroperasi pada berbagai jenis data. Misalnya, kelas yang dapat menampilkan beberapa jenis data yang berbeda dapat memiliki Display prosedur yang terlihat seperti ini:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub

Tanpa kelebihan beban, Anda harus membuat nama yang berbeda untuk setiap prosedur, meskipun mereka melakukan hal yang sama, seperti yang ditunjukkan berikutnya:

Sub DisplayChar(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub

Kelebihan beban memudahkan penggunaan properti atau metode karena menyediakan pilihan jenis data yang dapat digunakan. Misalnya, metode kelebihan beban yang dibahas Display sebelumnya dapat dipanggil dengan salah satu baris kode berikut:

' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)

Pada waktu proses, Visual Basic memanggil prosedur yang benar berdasarkan jenis data parameter yang Anda tentukan.

Aturan kelebihan beban

Anda membuat anggota yang kelebihan beban untuk kelas dengan menambahkan dua atau beberapa properti atau metode dengan nama yang sama. Kecuali untuk anggota turunan yang kelebihan beban, setiap anggota yang kelebihan beban harus memiliki daftar parameter yang berbeda, dan item berikut tidak dapat digunakan sebagai fitur pembeda saat kelebihan beban properti atau prosedur:

  • Pengubah, seperti ByVal atau ByRef, yang berlaku untuk anggota, atau parameter anggota.

  • Nama parameter

  • Jenis pengembalian prosedur

Kata Overloads kunci bersifat opsional saat kelebihan beban, tetapi jika ada anggota yang kelebihan beban menggunakan Overloads kata kunci, maka semua anggota lain yang kelebihan beban dengan nama yang sama juga harus menentukan kata kunci ini.

Kelas turunan dapat menggantikan anggota yang diwariskan dengan anggota yang memiliki parameter dan jenis parameter yang sama, sebuah proses yang dikenal sebagai penyembunyian berdasarkan nama dan tanda tangan. Jika Overloads kata kunci digunakan saat menyembunyikan berdasarkan nama dan tanda tangan, implementasi anggota kelas turunan akan digunakan alih-alih implementasi yang ada di kelas dasar, dan semua overload lainnya untuk anggota tersebut akan tersedia untuk instans kelas turunan.

Jika kata kunci Overloads dihilangkan saat menggantikan anggota yang diwariskan dengan anggota lain yang memiliki parameter dan jenis parameter yang identik, maka penggantian tersebut disebut pemblokiran berdasarkan nama. Bayangan berdasarkan nama menggantikan implementasi anggota yang diwariskan, dan membuat semua kelebihan beban lainnya tidak tersedia untuk instans kelas turunan dan dekedennya.

Pengubah Overloads dan Shadows tidak dapat digunakan dengan properti atau metode yang sama.

Contoh

Contoh berikut membuat metode overload yang menerima representasi String atau Decimal dari jumlah dolar dan mengembalikan string yang berisi pajak penjualan.

Untuk menggunakan contoh ini untuk membuat metode yang kelebihan beban

  1. Buka proyek baru dan tambahkan kelas bernama TaxClass.

  2. Tambahkan kode berikut ke kelas TaxClass.

    Public Class TaxClass
        Overloads Function TaxAmount(ByVal decPrice As Decimal,
             ByVal TaxRate As Single) As String
            TaxAmount = "Price is a Decimal. Tax is $" &
               (CStr(decPrice * TaxRate))
        End Function
    
        Overloads Function TaxAmount(ByVal strPrice As String,
              ByVal TaxRate As Single) As String
            TaxAmount = "Price is a String. Tax is $" &
               CStr((CDec(strPrice) * TaxRate))
        End Function
    End Class
    
  3. Tambahkan prosedur berikut ke formulir Anda.

    Sub ShowTax()
        ' 8% tax rate.
        Const TaxRate As Single = 0.08
        ' $64.00 Purchase as a String.
        Dim strPrice As String = "64.00"
        ' $64.00 Purchase as a Decimal.
        Dim decPrice As Decimal = 64
        Dim aclass As New TaxClass
        'Call the same method with two different kinds of data.
        MsgBox(aclass.TaxAmount(strPrice, TaxRate))
        MsgBox(aclass.TaxAmount(decPrice, TaxRate))
    End Sub
    
  4. Tambahkan tombol ke formulir Anda dan panggil ShowTax prosedur dari Button1_Click peristiwa tombol.

  5. Jalankan proyek tersebut dan klik tombol pada form untuk menguji prosedur ShowTax yang di-overload.

Pada waktu proses, pengkompilasi memilih fungsi kelebihan beban yang sesuai yang cocok dengan parameter yang digunakan. Saat Anda mengklik tombol, metode kelebihan beban dipanggil terlebih dahulu dengan Price parameter yang merupakan string dan pesan, "Harga adalah String. Pajak sebesar $5.12 ditampilkan. TaxAmount dipanggil untuk kedua kalinya dengan nilai Decimal dan pesan, "Harga adalah desimal". Pajak sebesar $5.12 ditampilkan.

Lihat juga