In tutto il libro .NET ho letto la linea guida per l'implementazione degli eventi spiega che è necessario sottoclasse EventArgs
e utilizzare EventHandler. Ho cercato più informazioni su http://msdn.microsoft.com/en-us/library/ms229011.aspx, e dice "Usa System.EventHandler invece di creare manualmente nuovi delegati da utilizzare come gestori di eventi". Capisco che ci siano ragioni importanti per utilizzare EventArgs, ma la mia domanda non è "Devo farlo in questo modo?", Ma "Posso farlo in questo modo?".Esiste un'associazione speciale tra la classe EventArgs e la parola chiave evento?
C'è qualche ragione per cui non posso utilizzare un delegato generico invece di uno EventHandler
con i miei eventi? Ad esempio, se voglio un mittente fortemente tipizzato (qualcun altro si infastidisce per quello object sender
?).
Per spiegare cosa intendo meglio, c'è qualche ragione che il seguente non funzionerà?
public class IoC
{
public AbstractFactory GetAbstractFactory()
{
var factory = new AbstractFactory();
factory.CreateObject +=()=>new object();
return factory;
}
}
public class AbstractFactory
{
public event Func<object> CreateObject;
private object OnObjectCreated()
{
if(CreateObject == null)
{
throw new Exception("Not injected.");
}
return CreateObject();
}
private object _injectedObject;
public object InjectedObject
{
get
{
if(_injectedObject == null)
{
_injectedObject = OnObjectCreated();
}
return _injectedObject;
}
}
}
Ho fatto esattamente questo per implementare qualcosa di simile a una collezione osservabile. – asawyer
Thread correlato: http://stackoverflow.com/questions/4828212/should-eventhandler-always-be-used-for-events/4828233 – CodesInChaos