繁体   English   中英

C#事件继承。 编译但在运行时引发异常

[英]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 (“值不能为空。参数名称:类型”)。 我已经看过这个线程 ,而这一次也一样,这帮助我建立这个代码。 但是我找不到这些异常的原因( sendere不为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM