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.
Mendeklarasikan jenis yang mewakili penunjuk fungsi.
Semua Runtime
Baik Windows Runtime maupun delegasi dukungan runtime bahasa umum.
Keterangan
delegasi adalah kata kunci yang sensitif terhadap konteks. Untuk informasi selengkapnya, lihat Kata Kunci Peka Konteks.
Untuk mendeteksi pada waktu kompilasi jika jenis adalah delegasi, gunakan __is_delegate() sifat jenis. Untuk informasi selengkapnya, lihat Dukungan Pengkompilasi untuk Jenis Sifat.
Windows Runtime
C++/CX mendukung delegasi dengan sintaks berikut.
Sintaks
access
delegate
return-type
delegate-type-identifier
(
[ parameters ]
)
Parameter
akses
(opsional) Aksesibilitas delegasi, yang dapat berupa public (default) atau private. Prototipe fungsi juga dapat memenuhi syarat dengan const kata kunci atau volatile .
jenis pengembalian
Jenis pengembalian prototipe fungsi.
pengidentifikasi jenis delegasi
Nama jenis delegasi yang dideklarasikan.
parameter
(Opsional) Jenis dan pengidentifikasi prototipe fungsi.
Keterangan
Gunakan pengidentifikasi jenis delegasi untuk mendeklarasikan peristiwa dengan prototipe yang sama dengan delegasi. Untuk informasi selengkapnya, lihat Delegasi (C++/CX).
Persyaratan
Opsi pengkompilasi: /ZW
Runtime Bahasa Umum
Runtime bahasa umum mendukung delegasi dengan sintaks berikut.
Sintaks
access
delegate
function_declaration
Parameter
akses
(opsional) Aksesibilitas delegasi di luar perakitan dapat bersifat publik atau privat. Defaultnya adalah privat. Di dalam kelas, delegasi dapat memiliki aksesibilitas apa pun.
function_declaration
Tanda tangan fungsi yang dapat terikat ke delegasi. Jenis pengembalian delegasi dapat berupa jenis terkelola apa pun. Untuk alasan interoperabilitas, disarankan agar jenis pengembalian delegasi menjadi jenis CLS.
Untuk menentukan delegasi yang tidak terikat, parameter pertama dalam function_declaration harus menjadi jenis this penunjuk untuk objek.
Keterangan
Delegasi adalah multicast: "penunjuk fungsi" dapat terikat ke satu atau beberapa metode dalam kelas terkelola. Kata kunci delegasi menentukan jenis delegasi multicast dengan tanda tangan metode tertentu.
Delegasi juga dapat terikat ke metode kelas nilai, seperti metode statis.
Delegasi memiliki karakteristik berikut:
Ini mewarisi dari
System::MulticastDelegate.Ini memiliki konstruktor yang mengambil dua argumen: penunjuk ke kelas terkelola atau NULL (dalam kasus pengikatan ke metode statis) dan metode yang sepenuhnya memenuhi syarat dari jenis yang ditentukan.
Ini memiliki metode yang disebut
Invoke, yang tanda tangannya cocok dengan tanda tangan delegasi yang dinyatakan.
Ketika delegasi dipanggil, fungsinya dipanggil dalam urutan terpasang.
Nilai pengembalian delegasi adalah nilai pengembalian dari fungsi anggota terlampir terakhirnya.
Delegasi tidak dapat kelebihan beban.
Delegasi dapat terikat atau tidak terikat.
Saat Anda membuat instans delegasi terikat, argumen pertama akan menjadi referensi objek. Argumen kedua dari instansiasi delegasi harus berupa alamat metode objek kelas terkelola, atau penunjuk ke metode jenis nilai. Argumen kedua dari instansiasi delegasi harus memberi nama metode dengan sintaks cakupan kelas lengkap dan menerapkan alamat operator.
Saat Anda membuat instans delegasi yang tidak terikat, argumen pertama harus menjadi alamat metode objek kelas terkelola, atau penunjuk ke metode jenis nilai. Argumen harus memberi nama metode dengan sintaks cakupan kelas lengkap dan menerapkan alamat operator.
Saat membuat delegasi ke fungsi statis atau global, hanya satu parameter yang diperlukan: fungsi (secara opsional, alamat fungsi).
Untuk informasi selengkapnya tentang delegasi, lihat
Persyaratan
Opsi pengkompilasi: /clr
Contoh
Contoh berikut menunjukkan cara mendeklarasikan, menginisialisasi, dan memanggil delegasi.
// mcppv2_delegate.cpp
// compile with: /clr
using namespace System;
// declare a delegate
public delegate void MyDel(int i);
ref class A {
public:
void func1(int i) {
Console::WriteLine("in func1 {0}", i);
}
void func2(int i) {
Console::WriteLine("in func2 {0}", i);
}
static void func3(int i) {
Console::WriteLine("in static func3 {0}", i);
}
};
int main () {
A ^ a = gcnew A;
// declare a delegate instance
MyDel^ DelInst;
// test if delegate is initialized
if (DelInst)
DelInst(7);
// assigning to delegate
DelInst = gcnew MyDel(a, &A::func1);
// invoke delegate
if (DelInst)
DelInst(8);
// add a function
DelInst += gcnew MyDel(a, &A::func2);
DelInst(9);
// remove a function
DelInst -= gcnew MyDel(a, &A::func1);
// invoke delegate with Invoke
DelInst->Invoke(10);
// make delegate to static function
MyDel ^ StaticDelInst = gcnew MyDel(&A::func3);
StaticDelInst(11);
}
in func1 8
in func1 9
in func2 9
in func2 10
in static func3 11