从泛型类调用泛型EventHandler

普兰尼·拉娜(Pranay Rana)

我是以下实现的派系和问题,编译器将引发错误“编译器委托具有无效的参数错误”,为此检查以下代码

public class MessageArgument<T> : EventArgs
{
    public T Message { get;  set; }

    public MessageArgument(T message)
    {
        Message = message;
    }
}

public class Publisher<T>
{
    //Defined datapublisher event
    public event EventHandler<MessageArgument<T>> DataPublisher;

    public virtual void OnDataPublisher<T>(MessageArgument<T> args)
    {
        var handler = DataPublisher;
        if (handler != null)
         //delegate has invalid argument error by compiler
            handler(this, args);
    }

    public void PublishData<T>()
    {
       //also facing issue with creating of generic type instace
        MessageArgument<T> message = (MessageArgument<T>)Activator.CreateInstance(typeof(MessageArgument<T>), new object[] { 10 }); 
        OnDataPublisher(message);
    }
}
网络

您有一个通用类,这意味着您不需要对该方法进行通用约束,因为它们被视为单独的通用类型。<T>从您的方法中删除约束,它应该可以正常工作:

public class Publisher<T>
{
    //Defined datapublisher event
    public event EventHandler<MessageArgument<T>> DataPublisher;

    public virtual void OnDataPublisher(MessageArgument<T> args)
    {
        var handler = DataPublisher;
        if (handler != null)
         //delegate has invalid argument error by compiler
            handler(this, args);
    }

    public void PublishData()
    {
        MessageArgument<T> message = (MessageArgument<T>)Activator.CreateInstance(typeof(MessageArgument<T>), new object[] { 10 }); 
        OnDataPublisher(message);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章