Aracılığıyla paylaş


temsilci (C++ Bileşen Uzantıları)

Bir işlev işaretçisini temsil eden bir tür bildirir.

Tüm Çalışma Zamanları

Hem Windows Çalışma Zamanı hem de ortak dil çalışma zamanı temsilcileri destekler.

3z2x4f55.collapse_all(tr-tr,VS.110).gifNotlar

delegate bağlama duyarlı bir anahtar sözcüktür.Daha fazla bilgi için bkz. Bağlama Duyarlı Anahtar Sözcükler (C++ Bileşen Uzantıları).

Bir türün derleme zamanında temsilci olup olmadığını denetlemek için, __is_delegate() tür niteliğini kullanın.Daha fazla bilgi için bkz. Tür Özellikleri için Derleyici Desteği (C++ Bileşen Uzantıları).

Windows Çalışma Zamanı

C++/CX temsilcileri aşağıdaki sözdizimi ile destekler.

3z2x4f55.collapse_all(tr-tr,VS.110).gifSözdizimi

access delegate return-type delegate-type-identifier ([ parameters ])

3z2x4f55.collapse_all(tr-tr,VS.110).gifParametreler

  • access
    (isteğe bağlı) Temsilcinin erişilebilirliği, public (varsayılan) ya da private olabilir.İşlev prototipi ayrıca const ya da volatile anahtar kelimeleri ile nitelendirilebilir.

  • return-type
    İşlev prototipinin dönüş türü.

  • delegate-type-identifier
    Bildirilen temsilci türünün adı.

  • parametreler
    (İsteğe bağlı) İşlev prototipinin türleri ve tanımlayıcıları.

3z2x4f55.collapse_all(tr-tr,VS.110).gifNotlar

Temsilci ile ayı prototipe sahip bir olay bildirmek için delegate-type-identifier kullanın.Daha fazla bilgi için, bkz. Temsilciler (C++/CX).

3z2x4f55.collapse_all(tr-tr,VS.110).gifGereksinimler

Derleyici seçeneği: /ZW

Ortak Dil Çalışma Zamanı

Ortak dil çalışma zamanı temsilcileri aşağıdaki sözdizimi ile destekler.

3z2x4f55.collapse_all(tr-tr,VS.110).gifSözdizimi

access delegate function_declaration

3z2x4f55.collapse_all(tr-tr,VS.110).gifParametreler

  • access
    (isteğe bağlı) Temsilcinin derleme dışındaki erişilebilirliği genel ya da özel olabilir.Varsayılan özeldir.Bir sınıf içinde, bir temsilci herhangi bir erişilebilirliğe sahip olabilir.

  • function_declaration
    Temsilciye bağlanabilen işlevin imzası.Bir temsilcinin dönüş türü herhangi bir yönetilen tür olabilir.Birlikte çalışabilirlik nedenlerinden dolayı, bir temsilcinin dönüş türünün bir CLS türü olması önerilir.

    Bağlanmamış bir temsilci tanımlamak için, function_declaration içindeki ilk parametre nesne için this işaretçisinin türü olmalıdır.Daha fazla bilgi için bkz. İlişkisiz Temsilciler.

3z2x4f55.collapse_all(tr-tr,VS.110).gifNotlar

Temsilciler çok noktaya yayınlıdır: "işlev işaretçisi" yönetilen bir sınıf içindeki bir ya da daha çok yöntemle bağlanabilir.delegate anahtar sözcüğü belirli bir yöntem imzasına sahip bir çok noktaya yayınlı temsilci türü tanımlar.

Bir temsilci ayrıca bir değer sınıfının yöntemine de bağlanabilir, bir statik yöntem gibi.

Bir temsilci aşağıdaki özelliklere sahiptir:

  • System::MulticastDelegate sınıfından devralır.

  • İki bağımsız değişken alan bir oluşturucusu vardır: bir yönetilen sınıfa işaretçi ya da NULL (statik bir yönteme bağlama durumunda) ve belirtilen türün tam nitelendirilmiş bir yöntemi.

  • Temsilcinin bildirilen imzasıyla eşleşen bir Invoke yöntemi vardır.

Bir temsilci çağırıldığında, işlev(ler)i eklendikleri sırada çağırılır.

Bir temsilcinin dönüş değeri en son eklenen üye işlevin dönüş değeridir.

Temsilciler aşırı yüklenemez.

Temsilciler bağlı ya da bağlanmamış olabilir.

Bağlı bir temsilci örneklediğinizde, ilk bağımsız değişken bir nesne başvurusu olmalıdır.Bir temsilci örneklemesinin ikinci bağımsız değişkeni ya yönetilen bir sınıf nesnesinin bir yönteminin adresi, ya da bir değer türünün yöntemine bir işaretçi olmalıdır.Bir temsilci örneklemesinin ikinci bağımsız değişkeni yöntemi tam sınıf kapsam sözdizimi ile adlandırmalı ve address-of işlecini uygulamalıdır.

Bir bağlanmamış temsilci örneklediğinizde, ilk bağımsız değişken ya yönetilen bir sınıf nesnesinin bir yönteminin adresi, ya da bir değer türünün yöntemine bir işaretçi olmalıdır.Bağımsız değişken yöntemi tam sınıf kapsam sözdizimi ile adlandırmalı ve address-of işlecini uygulamalıdır.

Bir statik ya da genel işlev için temsilci oluştururken, yalnızca tek bir parametre gereklidir: işlev (isteğe bağlı olarak, işlevin adresi).

Temsilciler hakkında daha fazla bilgi için bkz.

3z2x4f55.collapse_all(tr-tr,VS.110).gifGereksinimler

Derleyici seçeneği: /clr

3z2x4f55.collapse_all(tr-tr,VS.110).gifÖrnekler

Örnek

Aşağıdaki örnek temsilcilerin nasıl bildirileceğini, başlatılacağını ve çağırılacağını gösterir.

// 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);
}

Çıktı

  
  
  
  
  

Ayrıca bkz.

Kavramlar

Çalışma platformları için bileşen uzantıları