[英]c# event inheritance. Compile but throw an exception at runtime
我遇到一个事件上升的问题。 这是我的基类:
public abstract class MyClass<T>
{
public event EventHandler<MessageReceivedEventArgs<T>> MessageReceived;
protected void OnMessageReceived(MyClass<T> sender, MessageReceivedEventArgs<T> e)
{
EventHandler<MessageReceivedEventArgs<T>> handler = MessageReceived;
if (MessageReceived != null)
MessageReceived(sender, e);
}
}
而我的实现:
public class MyDerivedClass: MyClass<string>
{
void AFunction()
{
// Do some stuff
OnMessageReceived(this, new MessageReceivedEventArgs<string>("data"));
}
调用OnMessageReceived
,系统将引发System.ArgumentNullException
(“值不能为空。参数名称:类型”)。 我已经看过这个线程 ,而这一次也一样,这帮助我建立这个代码。 但是我找不到这些异常的原因( sender
和e
不为null,请通过调试器进行检查)。
我究竟做错了什么 ?
编辑 :这是我的MessageReceivedEventArgs
实现:
public class MessageReceivedEventArgs<T> : EventArgs
{
public T Data { get; private set; }
public MessageReceivedEventArgs(T data)
{
Data = data;
}
}
您确定代码抛出了异常吗? 任何事件订阅者都有可能引发Exception。
事件处理是一个顺序操作。 因此,如果第一个订阅者抛出未处理的异常,则事件处理将失败。
编辑:您看过堆栈跟踪。 您也可以尝试通过“ Exception”窗口让ide在每个ArgumentNullException上停止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.