C# 接口中的泛型事件参数
我试图将对象保存在一个泛型EventArgs类中,但由于EventHandler有一个接口,所以我很难实现这一点。有没有办法让这样的东西起作用 我的EventArgs类:C# 接口中的泛型事件参数,c#,generics,c#-4.0,C#,Generics,C# 4.0,我试图将对象保存在一个泛型EventArgs类中,但由于EventHandler有一个接口,所以我很难实现这一点。有没有办法让这样的东西起作用 我的EventArgs类: public class PositionChangedEventArgs<T> { public PositionChangedEventArgs(byte position, T deviceArgs) { Position = position; DeviceArgs
public class PositionChangedEventArgs<T>
{
public PositionChangedEventArgs(byte position, T deviceArgs)
{
Position = position;
DeviceArgs = deviceArgs;
}
public byte Position { get; private set; }
public T DeviceArgs { get; private set; }
}
公共类PositionChangedEventArgs
{
公共位置ChangedEventArgs(字节位置,T设备Args)
{
位置=位置;
DeviceArgs=DeviceArgs;
}
公共字节位置{get;private set;}
公共T设备args{get;private set;}
}
正在使用的接口:
public interface IMoveable
{
event EventHandler<PositionChangedEventArgs<T>> PositionChanged;
}
公共接口不可移动
{
事件处理程序位置已更改;
}
示例类用法:
public class SomeDevice : IMoveable
{
public event EventHandler<PositionChangedEventArgs<DeviceSpecificEventMessageArgs>> PositionChanged; //Compiler doesn't like this
}
公共类SomeDevice:IMoveable
{
public EventHandler PositionChanged;//编译器不喜欢这样
}
您需要将接口定义更改为以下内容:
public interface IMoveable<T>
{
event EventHandler<PositionChangedEventArgs<T>> PositionChanged;
}
公共接口不可移动
{
事件处理程序位置已更改;
}
您可以通过将类型传递给接口来使用它,如下所示:
public class SomeDevice : IMoveable<DeviceSpecificEventMessageArgs>
{
public event EventHandler<PositionChangedEventArgs<DeviceSpecificEventMessageArgs>> PositionChanged;
}
公共类SomeDevice:IMoveable
{
公共事件处理程序已更改;
}
这是因为必须将接口声明为泛型:
public interface IMoveable<T>
{
event EventHandler<PositionChangedEventArgs<T>> PositionChanged;
}
公共接口不可移动
{
事件处理程序位置已更改;
}
。您让接口使用一个泛型参数定义一个事件,在实际具体实现该事件时无法定义该泛型参数。如果将整个接口设置为该T的泛型,则可以通过表示正在为事件arg类型实现整个接口来关闭泛型。