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 private
olabilir 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::MulticastDelegate
devralı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ı
Invoke
bir 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