【发布时间】:2013-03-23 21:09:11
【问题描述】:
我有一个类需要在构造函数中传递不同数量的 Func 委托。这些委托中的每一个都将指向一个不同的函数,每个函数都有不同的返回类型,并且具有不同数量的参数(双精度型)。然后将相应地调用这些函数中的每一个。
问题 1. 现在,为了让使用这个类的人更容易,我正在考虑允许用户传递一个 List<object> 的 Func 代表。这是否可能,如果可以,我是否能够在将 List<object> 传递给(即构造函数)的方法中确定每个 Func 所需的返回类型和参数数量?
问题 2. 如果上述方法不可行,我是否需要使用返回类型/参数数量的每种不同组合重载构造函数并相应地路由每个 Func -_- ...如果没有,有人可以指出我正确的方向,我觉得我正在以错误的方式接近这个......
注意 - 来自 python 背景,我会做这样的事情(我对 c# 没有经验):
import inspect
def test(x): return x
inspect.getargspec(test)
returns: ArgSpec(args=['x'], varargs=None, keywords=None, defaults=None)
非常感谢
【问题讨论】:
-
您将大量函数传递给一个类的设计很不寻常。您是否考虑过为每个要传递的函数定义一个具有一个虚拟方法的类并让用户覆盖这些?
-
你:我能否确定每个 Func 所需的返回类型和参数数量 除了使用
List<object>,你可以使用List<Delegate>,因为所有@987654326 @ 类型派生自System.Delegate。那么如果d是List<Delegate>的一个元素,您可以使用d.Method.ReturnType和d.Method.GetParameters()来获取您要求的信息。您可以使用d.DynamicInvoke调用委托。