delegate (C++ Component Extensions)
Deklaruje typ, który reprezentuje wskaźnik funkcji.
Wszystkie środowiska wykonawcze
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
access
(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.return-type
Typ zwracany prototypu funkcji.delegate-type-identifier
Nazwa zadeklarowanego typu delegowanego.parameters
(Opcjonalnie) Typy i identyfikatory prototypu funkcji.
Uwagi
Użycie delegate-type-identifier Aby zadeklarować zdarzenia z tego samego prototypu jako pełnomocnik.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
access
(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.function_declaration
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 zdefiniować delegata niezwiązany, pierwszy parametr w function_declaration powinien być typu this wskaźnik do obiektu.Aby uzyskać więcej informacji, zobacz Niezwiązane obiekty delegowane.
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
Porady: definiowanie obiektów delegowanych (C++/CLI) oraz korzystanie z nich
Porady: przekazywanie obiektu Delegate^ funkcji macierzystej oczekującej wskaźnika funkcji
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
Zobacz też
Koncepcje
Component Extensions dla platform środowiska uruchomieniowego