event
anahtar sözcük (C++/CLI ve C++/CX)
event
anahtar sözcüğü, kayıtlı abonelere (olay işleyicileri) ilgi çekici bir şeyin oluştuğuna ilişkin bir bildirim olan bir olay bildirir.
Tüm Çalışma Zamanları
C++/CX, bir olay üyesi veya olay bloğu bildirmeyi destekler. Olay üyesi, bir olay bloğunu bildirmek için kısaltmadır. Varsayılan olarak, bir olay üyesi bir olay bloğunda add
açıkça bildirilen , remove
ve raise
işlevlerini bildirir. Bir olay üyesindeki işlevleri özelleştirmek için, bunun yerine bir olay bloğu bildirin ve ardından ihtiyacınız olan işlevleri geçersiz kılın.
Sözdizimi
// event data member
modifier event delegate^ event_name;
// event block
modifier event delegate^ event_name
{
modifier return_value add(delegate^ name);
modifier void remove(delegate^ name);
modifier void raise(parameters);
}
Parametreler
Değiştirici
Olay bildiriminde veya olay erişimci yönteminde kullanılabilecek bir değiştirici. Olası değerler ve virtual
şeklindedirstatic
.
delegate
Olay işleyicisinin imzası eşleşmesi gereken temsilci.
event_name
Olayın adı.
return_value
Olay erişimci yönteminin dönüş değeri. Doğrulanabilir olması için dönüş türü olmalıdır void
.
parametreler
(isteğe bağlı) Yönteminraise
, temsilci parametresinin imzası ile eşleşen parametreleri.
Açıklamalar
Olay, temsilci ile olay işleyicisi arasındaki ilişkidir. Olay işleyicisi, olay tetiklendiğinde yanıt veren bir üye işlevidir. Herhangi bir sınıftan istemcilerin imzayla eşleşen yöntemleri kaydetmesine ve temsilcinin dönüş türüne izin verir.
İki tür olay bildirimi vardır:
olay verileri üyesi
Derleyici, olayı için temsilci türünün bir üyesi biçiminde otomatik olarak depolama alanı oluşturur ve iç add
, remove
ve raise
üye işlevleri oluşturur. Olay veri üyesi bir sınıf içinde bildirilmelidir. Temsilcinin dönüş türünün dönüş türü, olay işleyicisinin dönüş türüyle eşleşmelidir.
olay bloğu
Olay bloğu, , remove
ve yöntemlerinin add
davranışını açıkça bildirmenizi ve raise
özelleştirmenizi sağlar.
bir olay işleyicisi eklemek ve kaldırmak için ve kullanabilir operator +=
ya da ve remove
yöntemlerini açıkça çağırabilirsinizadd
.operator -=
event
bağlama duyarlı bir anahtar sözcüktür. Daha fazla bilgi için bkz . Bağlama duyarlı anahtar sözcükler.
Windows Çalışma Zamanı
Açıklamalar
Daha fazla bilgi için bkz . Olaylar (C++/CX).
Olay işleyicisi eklemek ve daha sonra kaldırmak için, işlem tarafından döndürülen yapıyı add
kaydedinEventRegistrationToken
. Ardından işlemde remove
, kaldırılacak olay işleyicisini tanımlamak için kaydedilen EventRegistrationToken
yapıyı kullanın.
Gereksinimler
Derleyici seçeneği: /ZW
Ortak Dil Çalışma Zamanı
event anahtar sözcüğü bir olay bildirmenizi sağlar. Olay, bir sınıfın ilgi çekici bir şey olduğunda bildirim sağlamasının bir yoludur.
Sözdizimi
// event data member
modifier event delegate^ event_name;
// event block
modifier event delegate^ event_name
{
modifier return_value add(delegate^ name);
modifier void remove(delegate^ name);
modifier void raise(parameters);
}
Parametreler
Değiştirici
Olay bildiriminde veya olay erişimci yönteminde kullanılabilecek bir değiştirici. Olası değerler ve virtual
şeklindedirstatic
.
delegate
Olay işleyicisinin imzası eşleşmesi gereken temsilci.
event_name
Olayın adı.
return_value
Olay erişimci yönteminin dönüş değeri. Doğrulanabilir olması için dönüş türü olmalıdır void
.
parametreler
(isteğe bağlı) Yönteminraise
, temsilci parametresinin imzası ile eşleşen parametreleri.
Açıklamalar
Olay, temsilci ile olay işleyicisi arasındaki ilişkidir. Olay işleyicisi, olay tetiklendiğinde yanıt veren bir üye işlevidir. Herhangi bir sınıftaki istemcilerin imzayla eşleşen yöntemleri kaydetmesine ve temel alınan temsilcinin dönüş türüne izin verir.
Temsilcinin bir veya daha fazla ilişkili yöntemi olabilir. Kodunuz olayın gerçekleştiğini gösterdiğinde bu yöntemler çağrılır. Bir programdaki bir olay, .NET Framework ortak dil çalışma zamanını hedefleyen diğer programlar tarafından kullanılabilir hale getirilebilir.
İki tür olay bildirimi vardır:
olay verileri üyeleri
Derleyici, veri üyesi olayları için temsilci türünün üyesi olarak depolama alanı oluşturur. Olay veri üyesi bir sınıf içinde bildirilmelidir. Önemsiz bir olay olarak da bilinir. Örnek için kod örneğine bakın.
olay blokları
Olay blokları, , ve yöntemlerini uygulayarak , remove
ve raise
yöntemlerinin add
remove
raise
davranışını add
özelleştirmenize olanak sağlar. , remove
ve raise
yöntemlerinin add
imzası temsilcinin imzası ile eşleşmelidir. Olay bloğu olayları veri üyesi değildir. Veri üyesi olarak yapılan tüm kullanımlar derleyici hatası oluşturur.
Olay işleyicisinin dönüş türü, temsilcinin dönüş türüyle eşleşmelidir.
.NET Framework'te, veri üyesine bir yöntemin kendisiymiş gibi davranabilirsiniz (yani, ilgili temsilcinin Invoke
yöntemi). Bunu yapmak için, yönetilen olay veri üyesini bildirmek için temsilci türünü önceden belirleyin. Buna karşılık, yönetilen olay yöntemi, henüz tanımlanmamışsa ilgili yönetilen temsilciyi örtük olarak tanımlar. Örnek için bu makalenin sonundaki kod örneğine bakın.
Yönetilen bir olayı bildirirken, ve remove
işleçleri -=
+=
kullanılarak olay işleyicileri eklendiğinde veya kaldırıldığında çağrılacak erişimcileri belirtebilirsinizadd
. add
, remove
ve raise
yöntemleri açıkça çağrılabilir.
Microsoft C++'da olayları oluşturmak ve kullanmak için aşağıdaki adımlar izlenmelidir:
Temsilci oluşturma veya tanımlama. Kendi olayınızı tanımlıyorsanız anahtar sözcüğüyle
event
kullanılacak bir temsilci olduğundan da emin olmanız gerekir. Olay önceden tanımlanmışsa, örneğin .NET Framework'te olayın tüketicilerinin yalnızca temsilcinin adını bilmesi gerekir.Aşağıdakiler içeren bir sınıf oluşturun:
Temsilciden oluşturulan bir olay.
(İsteğe bağlı) Anahtar sözcüğüyle
event
bildirilen temsilci örneğinin mevcut olduğunu doğrulayan bir yöntem. Aksi takdirde, bu mantık olayı tetikleyen koda yerleştirilmelidir.Olayı çağıran yöntemler. Bu yöntemler bazı temel sınıf işlevlerinin geçersiz kılmaları olabilir.
Bu sınıf olayı tanımlar.
Yöntemleri olaya bağlayan bir veya daha fazla sınıf tanımlayın. Bu sınıfların her biri, temel sınıftaki olayla bir veya daha fazla yöntemi ilişkilendirir.
Olayı kullanın:
olay bildirimini içeren sınıfının bir nesnesini oluşturun.
Olay tanımını içeren sınıfının bir nesnesini oluşturun.
C++/CLI olayları hakkında daha fazla bilgi için bkz . Arabirimdeki Olaylar.
Gereksinimler
Derleyici seçeneği: /clr
Örnekler
Aşağıdaki kod örneğinde temsilci, olay ve olay işleyici çiftlerinin bildirilmesi gösterilmektedir. Olay işleyicilerine abone olmayı (eklemeyi), çağırmayı ve sonra aboneliği kaldırmayı (kaldırmayı) gösterir.
// mcppv2_events.cpp
// compile with: /clr
using namespace System;
// declare delegates
delegate void ClickEventHandler(int, double);
delegate void DblClickEventHandler(String^);
// class that defines events
ref class EventSource {
public:
event ClickEventHandler^ OnClick; // declare the event OnClick
event DblClickEventHandler^ OnDblClick; // declare OnDblClick
void FireEvents() {
// raises events
OnClick(7, 3.14159);
OnDblClick("Hello");
}
};
// class that defines methods that will called when event occurs
ref class EventReceiver {
public:
void OnMyClick(int i, double d) {
Console::WriteLine("OnClick: {0}, {1}", i, d);
}
void OnMyDblClick(String^ str) {
Console::WriteLine("OnDblClick: {0}", str);
}
};
int main() {
EventSource ^ MyEventSource = gcnew EventSource();
EventReceiver^ MyEventReceiver = gcnew EventReceiver();
// hook handler to event
MyEventSource->OnClick += gcnew ClickEventHandler(MyEventReceiver, &EventReceiver::OnMyClick);
MyEventSource->OnDblClick += gcnew DblClickEventHandler(MyEventReceiver, &EventReceiver::OnMyDblClick);
// invoke events
MyEventSource->FireEvents();
// unhook handler to event
MyEventSource->OnClick -= gcnew ClickEventHandler(MyEventReceiver, &EventReceiver::OnMyClick);
MyEventSource->OnDblClick -= gcnew DblClickEventHandler(MyEventReceiver, &EventReceiver::OnMyDblClick);
}
OnClick: 7, 3.14159
OnDblClick: Hello
Aşağıdaki kod örneği, önemsiz bir olayın yöntemini oluşturmak raise
için kullanılan mantığı gösterir. Olayın bir veya daha fazla abonesi varsa, raise
yöntemini örtük olarak veya açıkça çağırarak temsilciyi çağırır. Temsilcinin dönüş türü değilse void
ve sıfır olay abonesi varsa, raise
yöntem temsilci türü için varsayılan değeri döndürür. Olay abonesi yoksa, yöntemini çağırmak raise
hemen döndürür ve hiçbir özel durum tetiklenir. Temsilci dönüş türü değilse void
, temsilci türü döndürülür.
// trivial_events.cpp
// compile with: /clr /c
using namespace System;
public delegate int Del();
public ref struct C {
int i;
event Del^ MyEvent;
void FireEvent() {
i = MyEvent();
}
};
ref struct EventReceiver {
int OnMyClick() { return 0; }
};
int main() {
C c;
c.i = 687;
c.FireEvent();
Console::WriteLine(c.i);
c.i = 688;
EventReceiver^ MyEventReceiver = gcnew EventReceiver();
c.MyEvent += gcnew Del(MyEventReceiver, &EventReceiver::OnMyClick);
Console::WriteLine(c.i);
}
0
688