En todo el libro de .NET que he leído, la guía para la implementación de eventos explica que debe crear la subclase EventArgs
y usar EventHandler. Busqué más información en http://msdn.microsoft.com/en-us/library/ms229011.aspx, y dice "Use System.EventHandler en lugar de crear nuevos delegados manualmente para usarlos como controladores de eventos". Entiendo que hay razones importantes para usar EventArgs, pero mi pregunta no es "¿Debo hacerlo de esta manera?", Sino "¿Puedo hacerlo de esta manera?".¿Existe una asociación especial entre la clase EventArgs y la palabra clave event?
¿Hay alguna razón por la que no pueda usar un delegado genérico en lugar de un EventHandler
con mis eventos? Por ejemplo, si quiero un remitente de tipo fuerte (¿alguien más se molesta por ese object sender
?).
Para explicar mejor lo que quiero decir, ¿hay alguna razón para que lo siguiente no funcione?
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;
}
}
}
He hecho exactamente esto para implementar algo similar a una colección observable. – asawyer
Tema relacionado: http://stackoverflow.com/questions/4828212/should-eventhandler-always-be-used-for-events/4828233 – CodesInChaos