2012-05-07 10 views
6

Se ho un evento come questo:È possibile iscriversi alle sottoscrizioni di eventi in C#?

public delegate void MyEventHandler(object sender, EventArgs e); 
public event MyEventHandler MyEvent; 

e aggiunge un EventHandler come questo:

MyEvent += MyEventHandlerMethod; 

... è allora possibile registrare questo in qualche modo? In altre parole - è possibile avere qualcosa di simile:

MyEvent.OnSubscribe += MySubscriptionHandler; 

risposta

11

Analogamente alle proprietà autoattive, anche gli eventi vengono implementati automaticamente come impostazione predefinita.

è possibile espandere la dichiarazione di event come segue:

public event MyEventHandler MyEvent 
{ 
    add 
    { 
     ... 
    } 
    remove 
    { 
     ... 
    } 
} 

Vedi, per esempio, How to: Use a Dictionary to Store Event Instances (C# Programming Guide)

Vedi Events get a little overhaul in C# 4, Part I: Locks per come eventi auto-implementato differiscono tra C#   3 e C#   4.

+1

Oh wow non avevo idea che si possa fare questo. TIL. +1 –

6

E 'possibile dichiarare le funzioni di accesso di evento specifico, vale a dire, il componente aggiuntivo e rimuovere funzioni di accesso.

In questo modo è possibile eseguire una logica personalizzata quando vengono aggiunti nuovi gestori di eventi.

1

Quando si definiscono i propri eventi, è possibile utilizzare il formato più lungo per eseguire più codice quando le persone si collegano o si rimuovono da yo ur eventi.

Controllare le informazioni sulle parole chiave add e remove.

1

E 'possibile se si dichiara il vostro evento personalizzato, come questo pseudocodice:

class MyClass 
{ 


    public event EventHandler MyEvent 
    { 
     add {  //someone subscribed to this event ! } 
     remove {  //someone unsubscribed from this event ! } 
    } 


    ... 
} 
1

immagino, si sono alla ricerca di funzioni di accesso eventi. Modo per personalizzare i riferimenti agli abbonati. Ecco come si può fare

public class TestClass 
{ 

    private event EventHandler UnderlyingEvent; 
    public event EventHandler TestEvent 
    { 
     add 
     { 
      UnderlyingEvent += value; 
     } 
     remove 
     { 
      UnderlyingEvent -= value; 
     } 
    } 
} 

Per ulteriori informazioni, si prega di visitare questo articolo

http://msdn.microsoft.com/en-us/magazine/cc163533.aspx

Problemi correlati