C# 我无法扩展(子类)DataReceivedEventArgs?
我正在尝试扩展DataReceivedEventArgs,以便可以将其他数据传递给正在扩展进程的类。在连接到process.OutputDataReceived时,我希望传入一个控件,以便它写入,而不仅仅是从进程获取数据 尝试扩展DataReceivedEventArgs时,我收到错误:C# 我无法扩展(子类)DataReceivedEventArgs?,c#,events,controls,C#,Events,Controls,我正在尝试扩展DataReceivedEventArgs,以便可以将其他数据传递给正在扩展进程的类。在连接到process.OutputDataReceived时,我希望传入一个控件,以便它写入,而不仅仅是从进程获取数据 尝试扩展DataReceivedEventArgs时,我收到错误: The type 'System.Diagnostics.DataReceivedEventArgs' has no constructors defined public class DataReceive
The type 'System.Diagnostics.DataReceivedEventArgs' has no constructors defined
public class DataReceivedArgsWithControl : DataReceivedEventArgs
{
public Control ControlAdded { get; set; }
}
如何将其他属性添加到此Args?我扩展了EventArgs本身,因为它有一个构造函数,但不确定如何扩展这个参数。我怀疑您不能扩展,因为构造函数是
内部的。也许更好的方法是将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
任意位置
更新-
如果无法从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;
}
}
理想的选择是重新定义委托类型以匹配包装器,但上述方法将起作用。只需创建自己的event和EventArgs类,无需派生。我需要在DataReceivedEventArgs
中提供的属性:公共字符串数据{get;}
是,这就是当您提出自己的事件时,您自己的EventArgs类所需要的。就像史蒂夫一样。你能用最后一句话再解释一下吗?我不知道我在哪里会遇到麻烦使用这种类型的包装。感谢更新,我认为这将是一个问题。process.OutputDataReceived事件需要DataReceivedEventHandler,它需要DataReceivedEventArgs:公共委托void DataReceivedEventHandler(对象发送方,DataReceivedEventArgs e)
。看起来我必须找到另一种方法来获得这种功能不一定。如果无法重新定义代理,则可以利用代理协方差,这种协方差在本例中并不理想,但会起作用。我将更新答案。我已完成以下操作并出现错误:process.OutputDataReceived+=new MyEventHandler(TestMethod)
。TestMethod的签名是:MyEventHandler(对象发送者,EventArgs e)
。错误状态为:无法将类型project.MyEventHandler转换为System.Diagnostics.DataReceivedEventHandler
。我忘了什么吗?试着改为process.OutputDataReceived+=TestMethod
或process.OutputDataReceived+=newDataReceiveDevenHandler(TestMethod)`