C#中是否有所有委托的基础class
Is there a base class of all delegate in 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>
和许多其他类型我不想为每个操作和函数编写 'register' 方法。
有什么帮助吗?谢谢。
那里 是 一个基类型 - MulticastDelegate
本身有一个基类型 Delegate
- 但问题是你依赖于方法组转换 到委托类型,这需要特定 委托类型才能转换为。 Register(Action1)
可以将方法组 Action1
转换为 any 委托类型返回 void
并接受 string
- 可以有多个这样的委托.编译器怎么知道你指的是哪一个?
你 可以 做的是保留你的 RegisterAction
和 RegisterFunc
方法,然后使用一个通用的实现将委托存储在(比如)一个List<Delegate>
.
有没有办法将不同的方法作为参数传递给 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>
和许多其他类型我不想为每个操作和函数编写 'register' 方法。
有什么帮助吗?谢谢。
那里 是 一个基类型 - MulticastDelegate
本身有一个基类型 Delegate
- 但问题是你依赖于方法组转换 到委托类型,这需要特定 委托类型才能转换为。 Register(Action1)
可以将方法组 Action1
转换为 any 委托类型返回 void
并接受 string
- 可以有多个这样的委托.编译器怎么知道你指的是哪一个?
你 可以 做的是保留你的 RegisterAction
和 RegisterFunc
方法,然后使用一个通用的实现将委托存储在(比如)一个List<Delegate>
.