有没有办法将不同的方法作为参数传递给 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); //?
}
}
Run Code Online (Sandbox Code Playgroud)
我想将 Action1 和 Func1 传递到同一个方法“注册”中,我可以在其中使用反射来实现我的逻辑。但Action<string>, Func<string,string>代表不同,也许我将不得不处理Action<int>, Func<object>许多其他类型,我不想为每个动作和函数编写“注册”方法。
有什么帮助吗?谢谢你。
Jon*_*eet 10
这里是一个基本类型-MulticastDelegate其本身具有的基本类型Delegate-但问题是,你依靠一个方法组转换为委托类型,而这需要一个特定的委托类型转换为。Register(Action1)可以将方法组转换Action1为任何返回void和接受 a 的委托类型string- 可以有多个这样的委托。编译器如何知道您指的是哪一个?
您可以做的是保留您的RegisterAction和RegisterFunc方法,然后使用将委托存储在(例如) a 中的通用实现List<Delegate>。
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |