Udostępnij za pośrednictwem


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

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