c# - C#中是否有所有委托的基类
问题描述
有没有办法将不同的方法作为参数传递给 C# 中的另一个方法?我有一些像下面这样的代码
class Program
{
void Action1(string s){...}
string Func1(string s){...}
void RegisterAction(Action<string> action){...}
void RegisterFunc(Func<string, string> func){...}
void Register(????){ }
void Run()
{
RegisterAction(Action1); // ok
RegisterFunc(Func1); // ok
Register(Action1); // ?
Register(Func1); //?
}
}
我想将 Action1 和 Func1 传递到同一个方法“Register”中,我可以在其中使用反射来实现我的逻辑。但它们Action<string>, Func<string,string>
是不同的代表,也许我将不得不处理Action<int>, Func<object>
许多其他类型,我不想为每个动作和功能编写“注册”方法。
有什么帮助吗?谢谢你。
解决方案
有一个基类型 -MulticastDelegate
它本身有一个基类型Delegate
- 但问题是您依赖于方法组转换为委托类型,并且需要转换为特定的委托类型。Register(Action1)
可以将方法组转换Action1
为任何返回void
和接受的委托类型string
- 可以有多个这样的委托。编译器如何知道你的意思是哪一个?
您可以做的是保留您的RegisterAction
andRegisterFunc
方法,然后使用将委托存储在(例如) a 中的通用实现List<Delegate>
。
推荐阅读
- django - 在 aws linux 2 实例上使用弹性 beanstalk 运行 django-q
- c# - 登录主体但 User.Identity.IsAuthenticated 为 False 且 HttpContext.AuthenticateAsync 为 False
- json - 在 null 上调用了方法“[]”。接收方:在访问 json 中的键:值对时为 null T
- db2 - DB2 LUW (11.5) 从外部表插入导致行级锁定
- javascript - 嵌套 event.subscribe 解决方案
- python - r中的递归关系程序
- jupyter-notebook - 在 Jupyter 中隐藏单元格
- android - 如何在微调器下拉菜单和选定项目中设置不同的文本?
- python - 如何在 JupyterLab 中保存笔记本的当前状态
- python - 使用python通过websocket连接到api