Bagikan melalui


Pertimbangan dalam Prosedur Kelebihan Beban (Visual Basic)

Ketika Anda membebani prosedur, 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 Muatan Prosedur.

Anda dapat membebani Function prosedur dengan Sub prosedur, dan sebaliknya, asalkan mereka memiliki tanda tangan yang berbeda. Dua kelebihan beban tidak dapat berbeda hanya karena satu memiliki nilai pengembalian 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 Versi yang Terbebani

Anda terkadang memiliki alternatif untuk versi yang kelebihan beban, terutama ketika kehadiran 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.

Kelebihan Beban dan Argumen Opsional

Saat 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 secara signifikan berbeda tergantung pada apakah kode panggilan menyediakan 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 Optional parameter.

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 secara signifikan 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 ParamArray parameter dalam kasus berikut:

  • Anda tidak dapat memprediksi berapa banyak nilai yang dapat diteruskan kode panggilan ke array parameter, dan itu bisa menjadi angka besar.

  • Logika prosedur cocok untuk melakukan iterasi melalui semua nilai yang diberikan oleh kode yang memanggil, melakukan operasi yang secara prinsip sama pada setiap nilai.

Untuk informasi selengkapnya, lihat Array Parameter.

Kelebihan Beban Implisit untuk Parameter Opsional

Prosedur dengan parameter Opsional setara dengan dua prosedur yang kelebihan beban, satu dengan parameter opsional dan satu 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 sekumpulan kelebihan beban implisit, tiba dengan logika yang mirip dengan itu dalam contoh sebelumnya.

Kelebihan Beban Implisit untuk Parameter ParamArray

Pengkompilasi mempertimbangkan prosedur dengan parameter ParamArray untuk memiliki jumlah kelebihan beban yang tak terbatas, berbeda satu sama lain dalam apa 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 ParamArray jenis elemen

  • Untuk setiap bilangan bulat positif, satu kelebihan beban ketika kode panggilan menyediakan jumlah argumen tersebut ParamArray , masing-masing jenis elemen

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 membebani 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 untuk meneruskan jenis data yang berbeda ke parameter, pendekatan alternatif adalah pemrograman tanpa jenis. Anda dapat mengatur sakelar pemeriksaan jenis ke Off dengan Opsi Pernyataan Ketat atau opsi pengkompilasi -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 setiap jenis data yang diperkirakan akan diteruskan.

  • Pengkompilasi tidak dapat memberi sinyal kesalahan jika kode panggilan melewati jenis data yang tidak didukung prosedur.

Lihat juga