首页 > 解决方案 > 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>许多其他类型,我不想为每个动作和功能编写“注册”方法。

有什么帮助吗?谢谢你。

标签: c#delegates

解决方案


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

可以做的是保留您的RegisterActionandRegisterFunc方法,然后使用将委托存储在(例如) a 中的通用实现List<Delegate>


推荐阅读