我懷疑你不能,因爲構造函數是Internal
。也許更好的方法是將包裝在EventArgs
派生類中。
class MyDataReceivedEventArgs : EventArgs
{
DataReceivedEventArgs _inner;
public MyDataReceivedEventArgs(DataReceivedEventArgs inner, object extraProperty)
{
_inner = inner;
ExtraProperty = extraProperty;
}
public object ExtraProperty { get; private set;}
public DataReceivedEventArgs DataArgs
{
get
{
return _inner;
}
}
}
當然,如果您需要多態性,這可能不適合。如果您有一個預期爲的事件處理程序,那麼它將不能與包裝類一起使用。例如:
public void MyHandler(object sender, DataReceivedEventArgs e) { ... }
這隻能收到一個實例或派生類型,你的包裝不是一個實例。所以這取決於你是否需要處理你的自定義EventArgs類,如果它是任何地方的。
最新情況:
如果你不能改變你從public delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e)
使用,那麼你仍然可以訂閱使用方法與簽名void MyEventHandler(object sender, EventArgs e)
感謝的委託參數逆變,然後檢查實際委託的簽名類型爲EventArgs
參數。
public void MyEventHandler(object sender, EventArgs e)
{
var dataEventArgs = e as MyDataReceivedEventArgs;
if(dataEventArgs != null
{
var extendedProperty = dataEventArgs.ExtraProperty;
var innerArgs = dataEventArgs.DataArgs;
}
}
理想的選擇是重新定義委託類型以匹配包裝器,但上述方法將工作。
只需製作您自己的活動和EventArgs類,無需派生。 –
我需要一個'DataReceivedEventArgs'提供的屬性:'public string Data {get; }' – 5StringRyan
是的,這就是您在舉辦自己的活動時爲自己的EventArgs類所需的東西。像史蒂夫一樣。 –