c# – 将 *** 作存储在单个集合中以备以后使用

c# – 将 *** 作存储在单个集合中以备以后使用,第1张

概述我试图持有内存的一系列Action< T>类型的引用其中T是可变类型 我已经找到一个动态的解决方案,但我不喜欢使用动态的解决方案 public class MessageSubscriptor:IMessageSubscriptorPool{ Dictionary<Type, Action<dynamic>> Callbacks = new Dictionary<Type, Action 我试图持有内存的一系列Action< T>类型的引用其中T是可变类型

我已经找到一个动态的解决方案,但我不喜欢使用动态的解决方案

public class MessageSubscriptor:IMessageSubscriptorPool{    Dictionary<Type,Action<dynamic>> Callbacks = new Dictionary<Type,Action<dynamic>>();    public voID Subscribe<T>(Action<T> callback) where T :IMessage    {        Callbacks.Add(typeof(T),(obj) => callback(obj));    }}

有没有人知道更好的处理方法?
提前致谢.

解决方法 动作及LT; T>是代表,因此…
public class MessageSubscriptor:IMessageSubscriptorPool{    private Readonly Dictionary<Type,Delegate> _callbacks = new Dictionary<Type,Delegate>();    public voID Subscribe<T>(Action<T> callback) where T :IMessage    {        _callbacks.Add(typeof(T),callback);    }}

然后,说你想调用一个,你可以简单地执行一个演员:

public voID Invoke<T>(T message) where T :IMessage{    Delegate callback;    if (_callbacks.TryGetValue(typeof(T),out callback))        ((Action<T>)callback).Invoke(message);}
总结

以上是内存溢出为你收集整理的c# – 将 *** 作存储在单个集合中以备以后使用全部内容,希望文章能够帮你解决c# – 将 *** 作存储在单个集合中以备以后使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1257296.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存