c# - C#中是否有所有委托(delegate)的基类

标签 c# delegates

有没有办法将不同的方法作为参数传递给 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>是不同的委托(delegate),也许我将不得不处理Action<int>, Func<object>以及许多其他类型,我不想为每个操作和功能编写“注册”方法。

有什么帮助吗?谢谢你。

最佳答案

有一个基本类型 - MulticastDelegate它本身的基类型为 Delegate - 但问题是您依赖于方法组转换为委托(delegate)类型,并且需要转换为特定的委托(delegate)类型。 Register(Action1)可以转换方法组Action1到返回 void 的任何委托(delegate)类型并接受 string - 可以有多个这样的委托(delegate)。编译器如何知道你的意思是哪一个?

你能做的就是保留你的RegisterActionRegisterFunc方法,但随后使用将委托(delegate)存储在(例如)List<Delegate> 中的通用实现.

关于c# - C#中是否有所有委托(delegate)的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59774093/

相关文章:

c# - 如何从Web API接收这个Json?

c# - 创建 LINQ 实体类时损坏 POCO 域模型?

c# - 回调后重新加载插件

c# - 在 C# 中将本地时区转换为 PST 时区

c# - 将方法组隐式转换为委托(delegate)(用于 Control.Invoke 的参数)

c# - 如何使用包含运行时值的委托(delegate)来初始化事件?

c# - 如果在线程尚未完成时覆盖 Thread 对象,会发生什么情况?

java - 从 Java 中调用具有类委托(delegate)的 Kotlin 对象作为静态方法

c# - 与 Func<TResult> 相同的操作?

c++ - 如何创建一个 function_list<> 类来保存具有相同模板语法的 std::function<> vector ?