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