use*_*567 9 c# parameters delegates ref unsubscribe
我有以下课程:
public class Terminal : IDisposable
{
readonly List<IListener> _listeners;
public Terminal(IEnumerable<IListener> listeners)
{
_listeners = new List<IListener>(listeners);
}
public void Subscribe(ref Action<string> source)
{
source += Broadcast;
//Store the reference somehow?
}
void Broadcast(string message)
{
foreach (var listener in _listeners) listener.Listen(message);
}
public void Dispose()
{
//Unsubscribe from all the stored sources?
}
}
Run Code Online (Sandbox Code Playgroud)
我已经搜索了一段时间,似乎无法存储使用ref关键字传递的参数.尝试将源参数添加到列表或将其分配给字段变量不允许它保持对实际委托的原始引用的引用; 所以我的问题是:
谢谢.
编辑:似乎没有使用包装器或反射,没有解决给定的问题.我的目的是使类尽可能地可移植,而不必将代理包装在辅助类中.谢谢大家的贡献.
编辑:好吧,这是一个坏主意,所以回到基础知识:
我建议在 Action 上创建一个包装类:
class ActionWrapper
{
public Action<string> Action;
}
Run Code Online (Sandbox Code Playgroud)
并重组您的初始类以使用包装器:
private ActionWrapper localSource;
public void Subscribe(ActionWrapper source)
{
source.Action += Broadcast;
localSource = source;
}
public void Dispose()
{
localSource.Action -= Broadcast;
}
Run Code Online (Sandbox Code Playgroud)
现在您应该得到想要的结果。