使用泛型类型创建事件

时间:2014-02-07 12:12:42

标签: c# events

我想要的是编写一个类,它可以通过将类型序列化为Byte []并将事件DeSerializing a Byte []发送回Object来发送对象。

public interface ISource
    {
        event EventHandler<T> myevent;
        void Send<T>(T dataToSend);
    }

事件代码行在编译器中不起作用,但这就是我需要的。

示例实施:

public class Source : ISource
{
    ISerialPort _port;

    public Source (ISerialPort port)
    {
        _port = port;
    }

    public event EventHandler<T> myevent;

    public void Send<T>(T dataToSend)
    {
        //Converts type to an Byte[] with Serialisation
        //And send the Data
        _port.Send(ConvertedByteArray);
    }
}

发送部分正常工作没有问题,因为我可以预先确定类型 调用Send方法。

obj.Send<List<String>>(myList); 

现在我想用一个事件创建另一个方向(Byte [] - &gt; T)。

因此,我在订阅Source类中的Event时指定EventDataType的值。

有优雅的解决方案吗?

我不想指定类似“公共类”的类型 因为我希望班级可以接收和发送不同的obj /类型

此致 rubiktubik

1 个答案:

答案 0 :(得分:0)

您必须指定T in 接口声明和类声明。

interface ISource<T> where T : EventArgs
{
    event EventHandler<T> MyEvent;
    void Send<G>(G dataToSend);
}
public class Source<T> : ISource<T> where T : EventArgs
{

    public event EventHandler<T> MyEvent;

    public void Send<T>(T dataToSend)
    {
        throw new NotImplementedException();
    }
}

EventArgs创建派生类以传入。