泛型和事件 - 有没有办法做到这一点

本文关键字:这一点 有没有 事件 泛型 | 更新日期: 2023-09-27 17:55:55

在我最近遇到的订阅/取消订阅和通知并发性之后,我试图将我放在一个通用类中并使用它。

唉,我找不到办法,因为这是不允许的:

 public class LCLMulticastEvent<T> where T: System.MulticastDelegate
    {
        private event T internalEvent;
        private object lockObject = new object();
        public event T OnEvent
        { 
           add 
           { 
             lock( lockObject )
             {
                internalEvent += value; 
             }
           }
           remove 
           { 
               lock( lockObject )
               {
                  internalEvent += value; 
               }
            }
        }
        public void notify( params object[] args)
        { 
           if( internalEvent != null )
           {
               lock( lockObject )
               {
                   foreach( T invokee in internalEvent.GetInvocationList() )
                   {
                           invokee.DynamicInvoke( args );
                   }
               }
           }
        }
    }

编译器拒绝接受System.MulticastDelegate,说这是一个特殊的类...

有什么办法吗?

编辑:我试图在我的第一次演讲中过于简短。我想实现一种线程安全的事件包装器。@Thomas:动态调用应该是解决方案...

蒂亚

马里奥

泛型和事件 - 有没有办法做到这一点

我不太清楚你在这里要实现什么,但也许这会有所帮助:你可以使类在EventArgs类型中泛型,而不是多播委托

public class LCLMulticastEvent<TEventArgs> where TEventArgs : EventArgs
{
    private event EventHandler<TEventArgs> internalEvent;
    private object lockObject = new object();
    public event EventHandler<TEventArgs> OnEvent
    { 
        add { internalEvent += value; }
        remove { internalEvent -= value; }
    } 
}
相关文章: