簡體   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