Я подозреваю, что вы не можете, потому что конструктор - Internal
. Возможно, лучшим подходом было бы обернуть DataReceivedEventArgs
внутри вашего 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;
}
}
}
Конечно, это может не подойти, если вам нужен полиморфизм с DataReceivedEventArgs
. Если у вас есть обработчик событий, ожидающий DataReceivedEventArgs
, он не будет работать с классом-оболочкой. Например:
public void MyHandler(object sender, DataReceivedEventArgs e) { ... }
Это может получить только экземпляр DataReceivedEventArgs
или экземпляр производного типа, которым не является ваша оболочка. Таким образом, все зависит от того, нужно ли обрабатывать ваш пользовательский класс EventArgs, если бы он был DataReceivedEventArgs
где-либо.
update-
Если вы не можете изменить подпись используемого вами делегата с 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;
}
}
Идеальным вариантом было бы переопределить тип делегата в соответствии с вашей оболочкой, но вышеуказанный подход будет работать.