delegate (C++ Component Extensions)
Deklaruje typ, który reprezentuje wskaźnik funkcji.
Wszystkie czasy wykonania
Obie Środowisko wykonawcze systemu Windows i plików wykonywalnych wsparcia języka wspólnego obiektów delegujących.
Uwagi
delegate jest słowem kluczowym uzależnionym od kontekstu.Aby uzyskać więcej informacji, zobacz Kontekstowe słowa kluczowe (C++ Component Extensions).
Aby wykryć w czasie kompilacji, czy typ jest obiektem delegowanym, użyj cechy typu __is_delegate().Aby uzyskać więcej informacji, zobacz Obsługa cech typu w kompilatorze (C++ Component Extensions).
Środowisko wykonawcze systemu Windows
C++/CX obsługuje obiekty delegowane z następującą składnią.
Składnia
access delegate return-type delegate-type-identifier ([ parameters ])
Parametry
dostęp
(opcjonalnie) Ułatwienia dostępu pełnomocnika, który może być public (ustawienie domyślne) lub private.Prototyp funkcji może być również kwalifikowany przez słowa kluczowe const lub volatile.typ zwracany
Typ zwracany prototypu funkcji.identyfikator typu obiektu delegowanego
Nazwa zadeklarowanego typu delegowanego.parametry
(Opcjonalnie) Typy i identyfikatory prototypu funkcji.
Uwagi
Użyj identyfikatora typu obiektu delegowanego, aby zadeklarować zdarzenie z tym samym prototypem, jak obiekt delegowany.Aby uzyskać więcej informacji, zobacz Obiekty delegowane (C++/CX).
Wymagania
Opcja kompilatora: /ZW
Środowisko uruchomieniowe języka wspólnego
Środowisko uruchomieniowe języka wspólnego obsługuje obiekty delegowane z następującą składnią.
Składnia
access delegate function_declaration
Parametry
dostęp
(opcjonalnie) Ułatwienia dostępu pełnomocnika, poza Zgromadzenie może być publicznych lub prywatnych.Wartość domyślna jest prywatna.Wewnątrz klasy obiekt delegowany może mieć wszelkie ułatwienia dostępu.deklaracja_funkcji
Podpis funkcji, który może być powiązany z obiektem delegowanym.Typ zwracany obiektu delegowanego może być dowolnym typem zarządzanym.Ze względów współdziałania zalecane jest, żeby zwracany typ obiektu delegowanego był typem ze specyfikacją CLS.Aby niezwiązany obiekt delegowany został zdefiniowany, pierwszym parametrem w deklaracji funkcji powinien być typ wskaźnika this dla obiektu.Aby uzyskać więcej informacji, zobacz Niezwiązany delegatów..
Uwagi
Obiekty delegowane mają typ transmisji "multicast": "wskaźnik funkcji" można powiązać z jedną lub kilkoma metodami w obrębie klasy zarządzanej.Słowo kluczowe delegate definiuje multikastowy typ delegowany z podpisem określonej metody.
Obiekt delegowany może być związany także z metodą klasy wartości, taką jak metoda statyczna.
Obiekt delegowany ma następujące cechy:
Dziedziczy z System::MulticastDelegate.
Ma on konstruktora, który ma dwa argumenty: wskaźnik do klasy zarządzanej lub NULL (w przypadku tworzenia powiązania z metodą statyczną) i metoda pełną określonego typu.
Ma metodę o nazwie Invoke, której podpis pasuje do deklarowanego podpisu obiektu delegowanego.
Kiedy obiekt delegowany jest przywoływany, jego funkcja(e) są wywoływane w kolejności, w której były dołączone.
Wartość zwracana obiektu delegowanego jest wartością zwracaną z jego ostatniej dołączonej funkcji członkowskiej.
Obiekty delegowane nie mogą być przeciążone.
Obiekty delegowane mogą być powiązane lub niepowiązane.
Jeżeli tworzysz związany obiekt delegowany, pierwszy argument powinien być odwołaniem do obiektu.Drugi argument tworzenia obiektu delegowanego powinien być adresem metody obiektu klasy zarządzanej lub wskaźnikiem do metody typu wartości.Drugi argument tworzenia obiektu delegowanego powinien określać nazwę metody ze składnią w kontekście całej klasy i stosować operator address-of.
Jeżeli tworzysz niezwiązany obiekt delegowany, pierwszy argument powinien być albo adresem metody obiektu klasy zarządzanej, albo wskaźnikiem do metody typu wartości.Argument powinien określać nazwę metody ze składnią w kontekście całej klasy i stosować operator address-of.
Podczas tworzenia obiektu delegowanego do funkcji statycznej lub globalnej, tylko jeden parametr jest wymagany: funkcja (opcjonalnie, adres funkcji).
Aby uzyskać więcej informacji na temat obiektów delegowanych, zobacz
Wymagania
Opcja kompilatora: /clr
Przykłady
Przykład
Poniższy przykład pokazuje, jak deklarować, inicjować i wywoływać obiekty delegowane.
// 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);
}
Dane wyjściowe