delegate (C++/CLI ve C++/CX)

İş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.

Açıklamalar

delegate , bağlama duyarlı bir anahtar sözcüktür. Daha fazla bilgi için bkz . Bağlama Duyarlı Anahtar Sözcükler.

Bir türün temsilci olup olmadığını derleme zamanında algılamak için tür özelliğini kullanın __is_delegate() . Daha fazla bilgi için bkz . Tür Özellikleri için Derleyici Desteği.

Windows Çalışma Zamanı

C++/CX, aşağıdaki söz dizimiyle temsilcileri destekler.

Sözdizimi

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

Parametreler

Erişim
(isteğe bağlı) Temsilcinin erişilebilirliği( varsayılan) veya privateolabilir public . İşlev prototipi veya volatile anahtar sözcükleriyle de nitelenebilirconst.

dönüş türü
İşlev prototipinin dönüş türü.

temsilci türü tanımlayıcısı
Bildirilen temsilci türünün adı.

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

Açıklamalar

Temsilciyle aynı prototipe sahip bir olay bildirmek için delegate-type-tanımlayıcısını kullanın. Daha fazla bilgi için bkz . Temsilciler (C++/CX).

Gereksinimler

Derleyici seçeneği: /ZW

Ortak Dil Çalışma Zamanı

Ortak dil çalışma zamanı, aşağıdaki söz dizimine sahip temsilcileri destekler.

Sözdizimi

access
delegate
function_declaration

Parametreler

Erişim
(isteğe bağlı) Temsilcinin derleme dışındaki erişilebilirliği genel veya özel olabilir. Varsayılan değer özeldir. Bir sınıfın içinde temsilcinin erişilebilirliği olabilir.

function_declaration
Temsilciye bağlanabilen işlevin imzası. Temsilcinin dönüş türü herhangi bir yönetilen tür olabilir. Birlikte çalışabilirlik nedenleriyle, bir temsilcinin dönüş türünün cls türü olması önerilir.

İlişkisiz bir temsilci tanımlamak için, function_declaration içindeki ilk parametre nesne işaretçisinin this türü olmalıdır.

Açıklamalar

Temsilciler çok noktaya yayındır: "işlev işaretçisi" yönetilen bir sınıf içindeki bir veya daha fazla yönteme bağlanabilir. delegate anahtar sözcüğü, belirli bir yöntem imzasıyla çok noktaya yayın temsilci türünü tanımlar.

Temsilci, statik yöntem gibi bir değer sınıfının yöntemine de bağlanabilir.

Temsilci aşağıdaki özelliklere sahiptir:

  • öğesinden System::MulticastDelegatedevralır.

  • İki bağımsız değişken alan bir oluşturucuya sahiptir: yönetilen sınıfın işaretçisi veya NULL (statik bir yönteme bağlama durumunda) ve belirtilen türün tam yöntemi.

  • İmzası temsilcinin bildirilen imzası ile eşleşen adlı Invokebir yöntemi vardır.

Bir temsilci çağrıldığında, işlevleri eklenme sırasına göre çağrılır.

Temsilcinin dönüş değeri, son eklenen üye işlevinden döndürülen değerdir.

Temsilciler aşırı yüklenemez.

Temsilciler bağlı veya ilişkisiz olabilir.

İlişkili bir temsilci örneği oluşturduğunuzda, ilk bağımsız değişken bir nesne başvurusu olacaktır. Temsilci örneklemesinin ikinci bağımsız değişkeni, yönetilen sınıf nesnesinin bir yönteminin adresi veya değer türündeki bir yöntemin işaretçisi olmalıdır. Temsilci örneklemesinin ikinci bağımsız değişkeni, yöntemi tam sınıf kapsamı söz dizimi ile adlandırmalı ve adres işlecini uygulamalıdır.

İlişkisiz bir temsilci örneği oluştururken, ilk bağımsız değişken yönetilen sınıf nesnesinin yönteminin adresi veya değer türündeki bir yöntemin işaretçisi olacaktır. bağımsız değişkeninin yöntemini tam sınıf kapsamı söz dizimi ile adlandırması ve address-of işlecini uygulaması gerekir.

Statik veya genel bir işleve temsilci oluştururken yalnızca bir parametre gerekir: işlev (isteğe bağlı olarak işlevin adresi).

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

Gereksinimler

Derleyici seçeneği: /clr

Örnekler

Aşağıdaki örnekte temsilcileri bildirme, başlatma ve çağırma işlemleri gösterilmektedir.

// 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

Ayrıca bkz.

.NET ve UWP İçin Bileşen Uzantıları