对具有不同参数的多个方法使用一个委托
Posted
技术标签:
【中文标题】对具有不同参数的多个方法使用一个委托【英文标题】:Using one delegate to for several methods with different parameters 【发布时间】:2010-02-21 08:18:50 【问题描述】:是否可以以某种方式将一个委托用于具有不同参数的多个方法? 我使用反射来获取类中的所有方法,并且我想为每个方法分配一个委托并将该委托保存在字典中,并以枚举为键。 如果我正在处理远程过程调用实现,那么枚举是与方法关联的命令。
问候/每人
【问题讨论】:
【参考方案1】:您需要一种统一的方式来传递参数。这意味着您需要向它们传递一组参数。这意味着您需要MethodInfo
,而不是代表。
只需将MethodInfo
与字典中的名称对应起来即可。然后当你需要调用它们时,使用Invoke方法进行调用,传递目标对象和参数数组。
【讨论】:
【参考方案2】:您可以使用Delegate.CreateDelegate
函数并传递适当的委托类型(Action<>
或Func<>
)和MethodInfo的实例,在这种情况下您应该根据MethodInfo参数构造委托类型。
【讨论】:
【参考方案3】:如果参数个数、顺序和类型相同,是的。
简单地说,委托只是一个方法签名。
【讨论】:
【参考方案4】:你可以创建一个Dictionary<MyEnum, Object>
;。提取值后,将其强制转换为适当的委托并调用它。
或者,您可以使用命令模式之类的东西,并传入命令而不是枚举值:
interface ICommand
void Execute();
class SomeCommand : ICommand
public SomeCommand(/* instance and parameters go here */) /* ... */
public void Execute() /* ... */
class SomeOtherCommand : ICommand /* ... */
如果您希望它们像枚举一样可访问,您可以创建一个带有静态方法的工厂类来创建您的特定命令:
class RemoteCommand
public static SomeCommand SomeCommand
get
var result = new SomeCommand(/* ... */);
// ...
return result;
public static SomeOtherCommand SomeOtherCommand get /* ... */
编辑:
此外,不确定您的需求,但公开了用户可能想要进行的方法调用列表,但准确抽象出被调用的内容听起来像一个接口:
interface IRemoteCommand
void RemoteMethod();
void OtherRemoteMethod(/* params */);
void ImplementedAgainstADifferentServerMethod();
【讨论】:
以上是关于对具有不同参数的多个方法使用一个委托的主要内容,如果未能解决你的问题,请参考以下文章