有没有办法将不同的方法作为参数传递给 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)。编译器如何知道你的意思是哪一个?
你能做的就是保留你的RegisterAction
和 RegisterFunc
方法,但随后使用将委托(delegate)存储在(例如)List<Delegate>
中的通用实现.
关于c# - C#中是否有所有委托(delegate)的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59774093/