我有一个要添加 ValidateItem 事件的自定义集合。每当在自定义集合中添加或更新项目时,都会调用此 ValidateItem 事件。
我希望允许派生类能够订阅事件并确定它们自己的逻辑来判断一个项目是否“有效”,如果它是“无效”的,则可能禁止将其添加到集合中。
但我试图弄清楚如何让事件的调用者知道发生了什么以及如何传递有关正在发生的事情的信息。
我的自定义 eventargs 继承自 CancelEventArgs,因此我能够使用它将 Cancel 位传递回调用者。但我从未见过以这种方式传回错误信息(错误代码、消息等)的任何情况,所以我想知道这是否不是最好的方法。
我是否应该添加任何我希望传递回自定义 eventargs 类的错误数据,是否有充分的理由支持或反对这一点?还是有其他更好的方法来实现这一点?
这是我的 eventargs 类:
public delegate void ItemValidationEventHandler(object sender, ItemValidationEventArgs e);
public class ItemValidationEventArgs : CancelEventArgs
{
public ItemValidationEventArgs(object item, ObjectAction state, EventArgs e)
{
Item = item;
State = state;
EventArgs = e;
}
public ItemValidationEventArgs(object item, ObjectAction state) : this(item, state, new EventArgs())
{
}
public ItemValidationEventArgs() : this(null, ObjectAction.None, new EventArgs())
{
}
// is there a better way to pass this info?
public string ErrorMessage {get; set;}
public int ErrorNumber {get;set;}
public object Item { get; private set; }
public ObjectAction State { get; private set; }
public EventArgs EventArgs { get; private set; }
}
更新:我想另一个选择是使用这样的东西:
virtual bool Validate(object item, ObjectAction action, out string errorMessage)
派生类中的方法。虽然我倾向于避免输出参数......
如果有人对每种方法的优缺点有任何想法,我很想听听!
谢谢,马克斯