2009-01-31 12 views
13

Mi stavo registrando a un evento della mia classe e, come al solito, ero pigro e utilizzavo la funzionalità di completamento automatico integrata in Visual Studio 2008 Pro che crea automaticamente la creazione delegati e il suo metodo associato.Che cosa costituisce la "creazione di delegati ridondanti"?

public abstract class FooBase 
{ 
    protected event EventHandler<MyValueChangedArgs> MyValueChanged; 

    protected FooBase() 
    { 
     MyValueChanged += 
      new EventHandler<MyValueChangedArgs>(HandleMyValueChanged); 
    } 

    private void HandleMyValueChanged(object sender, MyValueChangedArgs e) 
    { 
     // Some handling logic 
    } 
} 

Di solito io non penso due volte quando Visual Studio gens il gestore di eventi per me, ma poi ho ricevuto una raccomandazione da Refactor! Pro per "Rimuovere la creazione del delegato ridondante". La raccomandazione restituisce:

public abstract class FooBase 
{ 
    protected event EventHandler<MyValueChangedArgs> MyValueChanged; 

    protected FooBase() 
    { 
     MyValueChanged += HandleMyValueChanged; 
    } 

    private void HandleMyValueChanged(object sender, MyValueChangedArgs e) 
    { 
     // Some handling logic 
    } 
} 

In quali circostanze la creazione delegata è ridondante e quando è la creazione delegata appropriata?

Grazie.

risposta

4

Penso che Refactor! si dice che la linea

MyValueChanged += new EventHandler<MyValueChangedArgs>(HandleMyValueChanged); 

possono essere accorciate e il compilatore dedurre una creazione gestore di eventi e il tipo di argomento TEventArgs ...

In quali circostanze è delegare creazione ridondante e quando è la creazione delegata è appropriata?

Il codice designer-generated ...

5

Mi dispiace. Non abbiamo avuto tempo nella pianificazione del prodotto per generare il codice più breve quando sono stati aggiunti metodi anonimi a C#.

Ho sempre modificato il codice generato per rimuovere la sintassi aggiuntiva.