イベントの実装のガイドラインを読んだすべての.NETブックでは、EventArgs
をサブクラス化してEventHandlerを使用する必要があることが説明されています。私はhttp://msdn.microsoft.com/en-us/library/ms229011.aspxの詳細を調べて、 "新しいハンドラを手動で作成してイベントハンドラとして使用する代わりに、System.EventHandlerを使用してください"と述べています。 EventArgsを使用する重要な理由があることを理解していますが、私の質問は「私はそれをこのようにするべきか」ではなく、「このようにすることはできますか?」です。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;
}
}
}
私はこれを、観測可能なコレクションに類似したものを実装するために正確に行ってきました。 – asawyer
関連スレッド:http://stackoverflow.com/questions/4828212/should-eventhandler-always-be-used-for-events/4828233 – CodesInChaos