Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pengkompilasi Visual Basic harus memutuskan kelebihan beban mana yang akan dipanggil saat prosedur ditentukan dalam beberapa versi yang kelebihan beban. Ini memutuskan dengan melakukan langkah-langkah berikut:
- Aksesibilitas. Ini menghilangkan kelebihan beban dengan tingkat akses yang mencegah kode panggilan memanggilnya.
- Jumlah Parameter. Ini menghilangkan kelebihan beban yang menentukan jumlah parameter yang berbeda dari yang disediakan dalam panggilan.
- Jenis Data Parameter. Pengkompilasi memberikan preferensi metode instans daripada metode ekstensi. Jika ada metode instans yang ditemukan yang hanya memerlukan konversi yang melebar agar sesuai dengan panggilan prosedur, semua metode ekstensi akan dihilangkan. Pengkompilasi berlanjut hanya dengan kandidat metode instance. Jika tidak ada metode instans seperti itu yang ditemukan, proses berlanjut dengan metode instans dan ekstensi. Dalam langkah ini, ini menghilangkan kelebihan beban di mana jenis data argumen panggilan tidak dapat dikonversi ke jenis parameter yang ditentukan dalam kelebihan beban.
- Konversi Yang Mempersempit. Ini menghilangkan kelebihan beban yang memerlukan konversi yang menyempit dari jenis argumen panggilan ke jenis parameter yang ditentukan. Langkah ini terjadi apakah sakelar pemeriksaan tipe (Opsi Pernyataan Ketat) adalah
On
atauOff
. - Pelebaran Terkecil. Pengkompilasi mempertimbangkan kelebihan beban yang tersisa secara berpasangan. Untuk setiap pasangan, ini membandingkan jenis data parameter yang ditentukan. Jika tipe di salah satu overload semuanya ditingkatkan ke tipe yang sesuai di yang lain, kompiler menghapus yang terakhir. Artinya, ia mempertahankan kelebihan beban yang membutuhkan jumlah pellebaran paling sedikit.
- Prioritas Resolusi Kelebihan Beban. Pengkompilasi menghapus kelebihan beban yang memiliki OverloadResolutionPriorityAttribute lebih rendah daripada nilai tertinggi pada kelebihan beban kandidat apa pun. Setiap kelebihan beban tanpa atribut ini ditetapkan nilai default nol.
- Kandidat Tunggal. Ini terus mempertimbangkan kelebihan beban berpasangan sampai hanya satu kelebihan beban yang tersisa, dan menyelesaikan panggilan ke kelebihan beban tersebut. Jika pengkompilasi tidak dapat mengurangi kelebihan beban menjadi satu kandidat, kompilator akan menghasilkan kesalahan.
Ilustrasi berikut menunjukkan proses yang menentukan set versi berlebih mana yang akan dipanggil.
Diagram alur
Contoh berikut mengilustrasikan proses resolusi kelebihan beban ini.
Overloads Sub z(ByVal x As Byte, ByVal y As Double)
End Sub
Overloads Sub z(ByVal x As Short, ByVal y As Single)
End Sub
Overloads Sub z(ByVal x As Integer, ByVal y As Single)
End Sub
Dim r, s As Short
Call z(r, s)
Dim p As Byte, q As Short
' The following statement causes an overload resolution error.
Call z(p, q)
Dalam panggilan pertama, pengkompilasi menghilangkan kelebihan beban pertama karena jenis argumen pertama (Short
) menyempit ke jenis parameter yang sesuai (Byte
). Kemudian menghilangkan kelebihan beban ketiga karena setiap jenis argumen dalam kelebihan beban kedua (Short
dan Single
) melebar ke jenis yang sesuai dalam kelebihan beban ketiga (Integer
dan Single
). Kelebihan beban kedua membutuhkan lebih sedikit pelesiran, sehingga pengkompilasi menggunakannya untuk panggilan.
Pada panggilan kedua, pengkompilasi tidak dapat menghilangkan kelebihan beban berdasarkan penyempitan. Ini menghilangkan overload ketiga karena alasan yang sama seperti pada panggilan pertama, karena dapat memanggil overload kedua dengan penyebaran jenis argumen yang lebih sedikit. Namun, pengkompilasi tidak dapat menyelesaikan antara kelebihan beban pertama dan kedua. Masing-masing memiliki satu jenis parameter yang ditentukan yang melebar ke jenis yang sesuai di yang lain (Byte
ke Short
, tetapi Single
ke Double
). Oleh karena itu, pengkompilasi menghasilkan kesalahan resolusi kelebihan beban.
Argumen Optional
dan ParamArray
yang kelebihan beban
Jika dua kelebihan beban prosedur memiliki tanda tangan yang identik kecuali bahwa parameter terakhir dinyatakan Opsional dalam satu dan ParamArray di yang lain, kompilator menyelesaikan panggilan ke prosedur tersebut sebagai berikut:
Jika panggilan menyediakan argumen terakhir sebagai | Pengkompilasi menyelesaikan panggilan ke kelebihan beban yang mendeklarasikan argumen terakhir sebagai |
---|---|
Tidak ada nilai (argumen dihilangkan) | Optional |
Satu nilai | Optional |
Dua nilai atau lebih dalam daftar yang dipisahkan koma | ParamArray |
Susunan (array) dengan panjang berapa pun (termasuk susunan kosong) | ParamArray |
Lihat juga
- Parameter Opsional
- Array Parameter
- Kelebihan Muatan Prosedur
- Prosedur Pemecahan Masalah
- Cara: Menentukan Beberapa Versi Prosedur
- Cara: Memanggil Prosedur Kelebihan Beban
- Petunjuk: Membebani Sebuah Prosedur yang Mengambil Parameter Opsional
- Cara: Membebani Prosedur yang Mengambil Jumlah Parameter yang Tidak Terbatas
- Pertimbangan dalam Prosedur Kelebihan Beban
- Kelebihan Beban
- Metode Ekstensi