泛型和事件 - 有没有办法做到这一点
本文关键字:这一点 有没有 事件 泛型 | 更新日期: 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; }
}
}