【发布时间】:2020-06-22 16:43:01
【问题描述】:
我有一个事件代理,它公开了一个EventHandler<T>,它允许观察者检查事件参数,并在需要时对其进行修改。虽然这可以正常工作,但我希望确保 T 仅存在于堆栈中,此外,任何组件都不能引用 T,从而延长其生命周期。
public class Game // mediator pattern
{
public event EventHandler<Query> Queries; // effectively a chain
public void PerformQuery(object sender, Query q)
{
Queries?.Invoke(sender, q);
}
}
遗憾的是,ref struct 不能用作通用参数:
ref struct Query {} // EventHandler<Query> not allowed
同样,我不能在EventHandler 的TEventArgs 中灌输任何“使用结构,通过引用传递”机制。
现在,在 C# 中,我们可以决定变量是否存在于堆上的堆栈中,例如使用stackalloc 之类的,所以我想,我所追求的只是在事件中获得与ref struct 等效的东西的一种方式。
【问题讨论】:
-
我很确定你不能决定这个。变量所在的位置是 c# 中的一个实现细节。
-
另外,如果你描述你试图解决的实际问题,而不是你试图解决它,这可能会更好。
-
您所指的 stackalloc 用于方法内部的临时分配,而不是持久状态存储。
标签: c#