Во всей книге .NET, которую я прочитал, руководство по реализации событий объясняет, что вам нужно создать подкласс EventArgs
и использовать EventHandler. Я нашел дополнительную информацию на http://msdn.microsoft.com/en-us/library/ms229011.aspx, и в нем говорится: «Используйте System.EventHandler вместо того, чтобы вручную создавать новые делегаты, которые будут использоваться в качестве обработчиков событий». Я понимаю, что есть важные причины для использования EventArgs, но мой вопрос не в том, «Должен ли я сделать это таким образом?», А в том, «Могу ли я сделать это таким образом?».
Есть ли причина, по которой я не могу использовать общий делегат вместо EventHandler
с моими событиями? Например, если мне нужен строго типизированный отправитель (кого-то еще это раздражает object sender
?).
Чтобы лучше объяснить, что я имею в виду, есть ли причина, по которой следующее не работает?
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;
}
}
}