Bagikan melalui


Pernyataan Delegasi

Digunakan untuk mendeklarasikan delegasi. Delegasi adalah jenis referensi yang mengacu pada Shared metode jenis atau ke metode instans objek. Prosedur apa pun dengan parameter yang cocok dan jenis pengembalian dapat digunakan untuk membuat instans kelas delegasi ini. Prosedur kemudian dapat dipanggil dengan menggunakan instans delegasi.

Sintaksis

[ <attrlist> ] [ accessmodifier ] _  
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]  

Bagian

Istilah Definisi
attrlist Fakultatif. Daftar atribut yang berlaku untuk delegasi ini. Beberapa atribut dipisahkan oleh koma. Anda harus mengapit Daftar Atribut dalam tanda kurung sudut ("<" dan ">").
accessmodifier Fakultatif. Menentukan kode apa yang dapat mengakses delegasi. Dapat berupa salah satu hal berikut:

- Publik. Kode apa pun yang dapat mengakses elemen yang menyatakan delegasi dapat mengaksesnya.
- Terlindungi. Hanya kode dalam kelas delegasi atau kelas turunan yang dapat mengaksesnya.
- Teman. Hanya kode dalam rakitan yang sama yang dapat mengakses delegasi.
- Swasta. Hanya kode dalam elemen yang menyatakan delegasi yang dapat mengaksesnya.

- Teman yang Dilindungi Hanya kode dalam kelas delegasi, kelas turunan, atau rakitan yang sama yang dapat mengakses delegasi.
- Dilindungi Privat Hanya kode dalam kelas delegasi atau di kelas turunan dalam rakitan yang sama yang dapat mengakses delegasi.
Shadows Fakultatif. Menunjukkan bahwa delegasi ini mendelegasikan ulang dan menyembunyikan elemen pemrograman bernama identik, atau sekumpulan elemen yang kelebihan beban, di kelas dasar. Anda dapat membayangi segala jenis elemen yang dideklarasikan dengan jenis lain.

Elemen bayangan tidak tersedia dari dalam kelas turunan yang membayanginya, kecuali dari tempat elemen bayangan tidak dapat diakses. Misalnya, jika Private elemen membayangi elemen kelas dasar, kode yang tidak memiliki izin untuk mengakses Private elemen mengakses elemen kelas dasar sebagai gantinya.
Sub Opsional, tetapi salah satu Sub atau Function harus muncul. Menyatakan prosedur ini sebagai prosedur delegasi Sub yang tidak mengembalikan nilai.
Function Opsional, tetapi salah satu Sub atau Function harus muncul. Menyatakan prosedur ini sebagai prosedur delegasi Function yang mengembalikan nilai.
name Dibutuhkan. Nama jenis delegasi; mengikuti konvensi penamaan variabel standar.
typeparamlist Fakultatif. Daftar parameter jenis untuk delegasi ini. Beberapa parameter jenis dipisahkan oleh koma. Secara opsional, setiap parameter jenis dapat dideklarasikan varian dengan menggunakan In dan Out pengubah generik. Anda harus menyertakan Daftar Tipe dalam tanda kurung dan memperkenalkannya dengan Of kata kunci.
parameterlist Fakultatif. Daftar parameter yang diteruskan ke prosedur saat dipanggil. Anda harus mengapit Daftar Parameter dalam tanda kurung.
type Diperlukan jika Anda menentukan Function prosedur. Jenis data dari nilai yang dikembalikan.

Komentar

Pernyataan menentukan Delegate parameter dan jenis pengembalian kelas delegasi. Prosedur apa pun dengan parameter yang cocok dan jenis pengembalian dapat digunakan untuk membuat instans kelas delegasi ini. Prosedur kemudian dapat dipanggil dengan menggunakan instans delegasi, dengan memanggil metode delegasi Invoke .

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 nama yang ditentukan yang tanda tangannya cocok dengan tanda tangan kelas delegasi. methodname dapat berupa metode bersama atau metode instans. methodname bukan pilihan, bahkan jika Anda membuat delegasi untuk metode bawaan kelas.

Untuk menentukan ekspresi lambda, gunakan sintaks berikut:

Function ([parm Sebagai type, parm2 Sebagai type2, ...]) expression

Penandatangan fungsi harus sesuai dengan tipe delegasi. Untuk informasi selengkapnya tentang ekspresi lambda, lihat Ekspresi Lambda.

Untuk informasi selengkapnya tentang delegasi, lihat Delegasi.

Contoh

Contoh berikut menggunakan Delegate pernyataan untuk mendeklarasikan delegasi untuk beroperasi pada dua angka dan mengembalikan angka. Metode ini DelegateTest 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