2012-12-20 17 views
5

ho ottenuto CS0079 errore di compilazione quando ho cercato di eseguire il codice qui sotto:C# CS0079 gestione degli eventi di compilazione Errore

public delegate void MyClassEHandler(MyClassEParam param); 

public class MyClassE 
{ 
    public static event MyClassEHandler Error 
    { 
     add 
     { 
       MyClassE.Error = (MyClassEHandler)Delegate.Combine(MyClassE.Error, value); 
     } 
    } 
} 

Errore:

CS0079 : The event MyClassE.Error can only appear on the left hand side of += or -=

Cercato in giro, ma non riusciva a capire come risolvere esso.

AGGIUNTO: if (MyClass.Error! = Null) o MyClass.Error (null, null);

Ottieni lo stesso errore CS0079.

CS0079 : The event MyClassE.Error can only appear on the left hand side of += or -=

Qualcuno può aiutarmi in questo?

+0

Puoi pubblicare il codice completo? –

+0

Questa parte del codice della classe 'MyClassE' o di un'altra? – Rafal

+0

sì, questo codice è parte della classe MyClassE. – Chris

risposta

6

Non è possibile impostare un evento, è sufficiente aggiungere o rimuovere gestori su di esso. Quindi, come dice l'errore, si deve solo fare:

public delegate void MyClassEHandler(MyClassEParam param); 

public static event MyClassEHandler Error 
{ 
    add 
    { 
      MyClassE.Error += value; 
    } 
    remove   
    { 
      MyClassE.Error -= value; 
    } 
} 

e la Delegate.Combine lavorerà magicamente per voi.

+0

Inoltre ha bisogno di 'remove' accessors. –

+0

Aggiunto, è implicito, ma in questo modo è meglio :) – SWeko

+0

Intendevo dire che non è necessario chiamare esplicitamente 'Delegate.Combine' come nel tuo snippet, devi solo fare un + = e il nuovo gestore viene aggiunto all'invocazione elenco. – SWeko

2

Prova questa

public delegate void MyClassEHandler(MyClassEParam param); 
static MyClassEHandler error; 

public static event MyClassEHandler Error 
{ 
add 
{ 
     MyClassE.error += (MyClassEHandler)Delegate.Combine(MyClassE.Error, value); 
} 

remove 
{ 
     MyClassE.Error -= (MyClassEHandler)Delegate.Combine(MyClassE.Error, value); 
} 

} 

Fare riferimento alla Intercepting add remove of c# event and delegates

Problemi correlati