Share via


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 addaçıkça bildirilen , removeve 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, removeve 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, , removeve yöntemlerinin adddavranışı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 , removeve raise yöntemlerinin addremoveraise davranışını addözelleştirmenize olanak sağlar. , removeve raise yöntemlerinin addimzası 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, removeve 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:

  1. 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.

  2. 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.

  3. 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.

  4. 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

Ayrıca bkz.

.NET ve UWP İçin bileşen uzantıları