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