[英]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.