Pertimbangan dalam Prosedur Overloading (Visual Basic)
Ketika Anda membebani prosedur yang berlebihan, Anda harus menggunakan tanda tangan yang berbeda untuk setiap versi yang kelebihan beban. Ini biasanya berarti setiap versi harus menentukan daftar parameter yang berbeda. Untuk informasi selengkapnya, lihat "Tanda Tangan Berbeda" dalam Kelebihan Beban Prosedur.
Anda dapat membebani prosedur Function
dengan prosedur Sub
, dan sebaliknya, asalkan mereka memiliki tanda tangan yang berbeda. Dua kelebihan beban tidak dapat berbeda hanya dalam yang satu memiliki nilai yang dikembalikan dan yang lain tidak.
Anda dapat membebani properti dengan cara yang sama seperti Anda membebani prosedur, dan dengan batasan yang sama. Namun, Anda tidak dapat membebani prosedur dengan properti, atau sebaliknya.
Alternatif untuk Overloaded Versions
Anda terkadang memiliki alternatif untuk versi yang kelebihan beban, terutama ketika keberadaan argumen bersifat opsional atau jumlahnya bervariasi.
Perlu diingat bahwa argumen opsional belum tentu didukung oleh semua bahasa, dan array parameter terbatas pada Visual Basic. Jika Anda menulis prosedur yang kemungkinan akan dipanggil dari kode yang ditulis dalam salah satu dari beberapa bahasa yang berbeda, versi yang kelebihan beban menawarkan fleksibilitas terbesar.
Argumen Bernama dan Opsional
Ketika kode panggilan dapat secara opsional menyediakan atau menghilangkan satu atau beberapa argumen, Anda dapat menentukan beberapa versi yang kelebihan beban atau menggunakan parameter opsional.
Kapan Menggunakan Versi Kelebihan Beban
Anda dapat mempertimbangkan untuk menentukan serangkaian versi yang kelebihan beban dalam kasus berikut:
Logika dalam kode prosedur sangat berbeda tergantung pada apakah kode panggilan memasok argumen opsional atau tidak.
Kode prosedur tidak dapat menguji dengan andal apakah kode panggilan telah menyediakan argumen opsional. Ini adalah kasus, misalnya, jika tidak ada kandidat yang mungkin untuk nilai default yang tidak dapat disediakan oleh kode panggilan.
Kapan Menggunakan Parameter Opsional
Anda mungkin lebih suka satu atau beberapa parameter opsional dalam kasus berikut:
- Satu-satunya tindakan yang diperlukan ketika kode panggilan tidak menyediakan argumen opsional adalah mengatur parameter ke nilai default. Dalam kasus seperti itu, kode prosedur bisa kurang rumit jika Anda menentukan satu versi dengan satu atau beberapa parameter
Optional
.
Untuk informasi selengkapnya, lihat Parameter Opsional.
Kelebihan Beban dan ParamArrays
Saat kode panggilan dapat meneruskan jumlah variabel argumen, Anda dapat menentukan beberapa versi yang kelebihan beban atau menggunakan array parameter.
Kapan Menggunakan Versi Kelebihan Beban
Anda dapat mempertimbangkan untuk menentukan serangkaian versi yang kelebihan beban dalam kasus berikut:
Anda tahu bahwa kode panggilan tidak pernah meneruskan lebih dari sejumlah kecil nilai ke array parameter.
Logika dalam kode prosedur sangat berbeda tergantung pada berapa banyak nilai yang dilewatkan kode panggilan.
Kode panggilan dapat meneruskan nilai dari berbagai jenis data.
Kapan Menggunakan Array Parameter
Anda lebih baik dilayani oleh parameter ParamArray
dalam kasus berikut:
Anda tidak dapat memprediksi berapa banyak nilai yang dapat diteruskan kode panggilan ke array parameter, dan itu bisa berupa angka besar.
Logika prosedur meminjamkan dirinya untuk melakukan iterasi melalui semua nilai yang dilewati kode panggilan, melakukan operasi yang pada dasarnya sama pada setiap nilai.
Untuk informasi selengkapnya, lihat Array Parameter.
Kelebihan Beban Implisit untuk Parameter Opsional
Metode dengan parameter Opsional setara dengan dua metode yang kelebihan beban, satu dengan parameter opsional, dan yang lainnya tanpanya. Anda tidak dapat membebani prosedur seperti itu dengan daftar parameter yang sesuai dengan salah satu dari ini. Deklarasi berikut menggambarkan hal ini.
Overloads Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
' The preceding definition is equivalent to the following two overloads.
' Overloads Sub q(ByVal b As Byte)
' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
' Therefore, the following overload is not valid because the signature is already in use.
' Overloads Sub q(ByVal c As Byte, ByVal k As Long)
' The following overload uses a different signature and is valid.
Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)
Untuk prosedur dengan lebih dari satu parameter opsional, ada serangkaian kelebihan beban implisit, tiba dengan logika yang mirip dengan yang ada dalam contoh sebelumnya.
Kelebihan Beban Implisit untuk Parameter ParamArray
Kompiler mempertimbangkan prosedur dengan parameter ParamArray untuk memiliki jumlah kelebihan beban yang tak terbatas, berbeda satu sama lain dalam apa yang kode panggilan diteruskan ke array parameter, sebagai berikut:
Satu kelebihan beban ketika kode panggilan tidak menyediakan argumen ke
ParamArray
Satu kelebihan beban ketika kode panggilan memasok array satu dimensi dari jenis elemen
ParamArray
Untuk setiap bilangan bulat positif, satu kelebihan beban ketika kode panggilan memasok jumlah argumen itu, masing-masing jenis elemen
ParamArray
Deklarasi berikut menggambarkan kelebihan beban implisit ini.
Overloads Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.
Anda tidak dapat memberikan kelebihan beban pada prosedur seperti itu dengan daftar parameter yang mengambil array satu dimensi untuk array parameter. Namun, Anda dapat menggunakan tanda tangan dari kelebihan beban implisit lainnya. Deklarasi berikut menggambarkan hal ini.
' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)
Pemrograman Tanpa Jenis sebagai Alternatif untuk Kelebihan Beban
Jika Anda ingin mengizinkan kode panggilan meneruskan jenis data yang berbeda ke parameter, pendekatan alternatif adalah pemrograman tanpa jenis. Anda dapat menyetel sakelar pemeriksaan jenis ke Off
dengan opsi Option Strict Statement atau opsi kompiler-optionstrict. Kemudian Anda tidak perlu mendeklarasikan jenis data parameter. Namun, pendekatan ini memiliki kerugian berikut dibandingkan dengan kelebihan beban:
Pemrograman tanpa jenis menghasilkan kode eksekusi yang kurang efisien.
Prosedur harus menguji untuk setiap jenis data yang diantisipasi diteruskan.
Kompiler tidak dapat memberi sinyal kesalahan jika kode panggilan melewati jenis data yang tidak didukung prosedur.
Lihat juga
- Prosedur
- Parameter Prosedur dan Argumen
- Prosedur Pemecahan Masalah
- Cara: Menentukan Beberapa Versi Prosedur
- Cara: Memanggil Prosedur Overload
- Cara: Membebani Prosedur yang Mengambil Parameter Opsional
- Cara: Membebani Prosedur yang Membutuhkan Jumlah Parameter Tidak Terbatas
- Resolusi Kelebihan Beban
- Kelebihan beban
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk