Pernyataan Delegate (Delegasi)
Digunakan untuk mendeklarasikan delegasi. Delegasi adalah jenis referensi yang mengacu pada metode Shared
dari jenis atau ke metode instans dari objek. Prosedur apa pun dengan parameter yang cocok dan jenis kembalian dapat digunakan untuk membuat instans kelas delegasi ini. Prosedur kemudian dapat dipanggil dengan menggunakan instans delegasi.
Sintaks
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
Generator
Term | Definisi |
---|---|
attrlist |
Opsional. Daftar atribut yang berlaku untuk delegasi ini. Beberapa atribut dipisahkan dengan koma. Anda harus menyertakan Daftar Atribut dalam tanda kurung sudut ("< " dan "> "). |
accessmodifier |
Opsional. Tentukan kode apa yang dapat mengakses delegasi tersebut. Bisa jadi salah satu dari yang berikut: - Publik. Kode mana pun yang dapat mengakses elemen yang mendeklarasikan delegasi yang dapat mengaksesnya. - Terlindungi. Hanya kode di dalam kelas delegasi atau kelas turunan dapat mengaksesnya. - Teman. Hanya kode dalam rakitan yang sama yang dapat mengakses delegasi. - Privat. Hanya kode dalam elemen yang menyatakan delegasi yang dapat mengaksesnya. - Teman yang Dilindungi Hanya kode dalam kelas peristiwa, kelas turunan, atau rakitan yang sama yang dapat mengaksesnya. - Dilindungi Privat Hanya kode dalam kelas delegasi atau di kelas turunan dalam rakitan yang sama yang dapat mengakses delegasi. |
Shadows |
Opsional. Menunjukkan bahwa delegasi ini mendeklarasikan kembali dan menyembunyikan elemen pemrograman bernama identik, atau kumpulan elemen kelebihan beban, di kelas dasar. Anda dapat membayangi segala jenis elemen yang dideklarasikan dengan jenis lainnya. Elemen bayangan tidak tersedia dari dalam kelas turunan yang membayangi elemen bayangan, kecuali dari tempat elemen bayangan tidak dapat diakses. Misalnya, jika elemen Private membayangi elemen kelas dasar, kode yang tidak memiliki izin untuk mengakses elemen Private akan mengakses elemen kelas dasar sebagai gantinya. |
Sub |
Opsional, tetapi salah satu Sub atau Function harus muncul. Menyatakan prosedur ini sebagai prosedur Sub delegasi yang tidak mengembalikan nilai. |
Function |
Opsional, tetapi salah satu Sub atau Function harus muncul. Menyatakan prosedur ini sebagai prosedur Function delegasi yang mengembalikan nilai. |
name |
Harus diisi. Nama jenis delegasi; mengikuti konvensi penamaan variabel standar. |
typeparamlist |
Opsional. Daftar parameter jenis untuk delegasi ini. Parameter jenis jamak dipisahkan oleh koma. Secara opsional, setiap parameter jenis dapat dinyatakan sebagai varian menggunakan pengubah generik In dan Out . Anda harus menyertakan Daftar Tipe dalam tanda kurung dan memperkenalkannya dengan kata kunci Of . |
parameterlist |
Opsional. Daftar parameter yang diteruskan ke prosedur saat dipanggil. Anda harus menyertakan Daftar Parameter dalam tanda kurung. |
type |
Wajib diisi jika Anda menentukan prosedur Function . Jenis data nilai pengembalian. |
Keterangan
Pernyataan Delegate
menentukan jenis parameter dan kembalian kelas delegasi. Prosedur apa pun dengan parameter, jenis, dan jenis tampilan yang cocok dapat digunakan untuk membuat instans kelas delegasi ini. Prosedur kemudian dapat dipanggil dengan menggunakan instans delegasi, dengan memanggil metode Invoke
delegasi tersebut.
Delegasi dapat dideklarasikan di tingkat namespace, modul, kelas, atau struktur, tetapi tidak dalam prosedur.
Setiap kelas delegasi mendefinisikan konstruktor yang diteruskan spesifikasi metode objek. Argumen ke konstruktor delegasi harus menjadi referensi ke metode, atau ekspresi lambda.
Untuk menentukan referensi ke metode, gunakan sintaks berikut:
AddressOf
[expression
.]methodname
Jenis waktu kompilasi expression
harus berupa nama kelas atau antarmuka yang berisi metode dari nama yang ditentukan yang tanda tangannya cocok dengan tanda tangan kelas delegasi. methodname
dapat berupa metode bersama atau metode instans. methodname
tidak bersifat opsional, bahkan jika Anda membuat delegasi untuk metode default kelas.
Untuk menentukan ekspresi lambda, gunakan sintaks berikut:
Function
([parm
Sebagai type
, parm2
Sebagai type2
, ...]) expression
Tanda tangan fungsi harus cocok dengan jenis delegasi. Untuk informasi selengkapnya tentang ekspresi lambda, lihat Ekspresi Lambda.
Untuk informasi lebih lanjut mengenai delegasi, lihat Delegasi.
Contoh
Contoh berikut menggunakan pernyataan Delegate
untuk mendeklarasikan delegasi untuk beroperasi pada dua angka dan mengembalikan satu angka. Metode DelegateTest
ini mengambil instans delegasi jenis ini dan menggunakannya untuk beroperasi pada pasangan angka.
Delegate Function MathOperator(
ByVal x As Double,
ByVal y As Double
) As Double
Function AddNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x + y
End Function
Function SubtractNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x - y
End Function
Sub DelegateTest(
ByVal x As Double,
ByVal op As MathOperator,
ByVal y As Double
)
Dim ret As Double
ret = op.Invoke(x, y) ' Call the method.
MsgBox(ret)
End Sub
Protected Sub Test()
DelegateTest(5, AddressOf AddNumbers, 3)
DelegateTest(9, AddressOf SubtractNumbers, 3)
End Sub
Lihat juga
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