Questa è una piccola osservazione. Avevo notato infatti più volte come gestivano gli eventi dei controlli del Framework ma non avevo mai approfondito la cosa.
Solitamente, e anche sui libri, per ogni evento o si dichiara una variabile pubblica del nostro handler e si aggiunge la chiave event:
public event EventHandler MioEvento;
oppure se ne dichiara uno privato senza la parola chiave event e si creano a mano i metodi per aggiungere o togliere un handler all'evento (utile se non lo si vuole serializzare):
private EventHandler _mioEvento;
public event MioEvento
{
add {
_mioEvento += value;
}
remove {
_mioEvento -= value;
}
}
Il risultato del compilatore, in entrambi i casi è il medesimo. Questa tecnica l'ho illustrata anche nel mio articolo per lo sviluppo di webControl.
Il Framework usa però un altro metodo. La classe base Control ha una proprietà indicizzata Events che restituisce un handler in base ad una chiave di tipo object.
In pratica invece di avere tante variabili private quanti sono gli eventi, abbiamo una collezione. Faremo quindi:
public event MioEvento
{
add {
base.Events.AddHandler("mioEvento", value);
}
remove {
base.Events.RemoveHandler("mioEvento", value);
}
}
Qui abbiamo utilizzato una stringa come chiave ma il framework usa delle variabili statiche di tipo object.
Sinceramente non so quale sia l'utilità di questo approccio, ma è da tenere comunque in considerazione se si vuole restare in conformità al Framework.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- LINQ, lazy loading e architettura, l'11 marzo 2011 alle 18:42
- MetadataDiffViewer: aggiornato al .NET Framework 4.0, Silverlight 4.0 e Sharepoint 2010, il 7 gennaio 2010 alle 13:58
- .NET Framework 4.0 beta 1: Windows Communication Foundation, il 18 maggio 2009 alle 16:00
- Parallelizzare in Silverlight 2.0, il 21 aprile 2009 alle 00:25
- Silverlight: performance dell'isolated storage, il 16 aprile 2009 alle 17:38
- MetadataDiffViewer: differenze tra i framework, il 15 aprile 2009 alle 18:56