从名称和签名解决方法的方法

时间:2012-02-08 01:52:07

标签: c# reflection expression reflection.emit

如果您有方法名称和参数类型数组(签名),则可以使用反射来获取MethodInfo并调用该方法。

MethodInfo info = myObj.GetType().GetMethod("MethodName", new object[] { typeof(string), typeof(int) });

info.Invoke(myObj, new object[] {"Hello", 22});

以这种方式调用MethodInfo非常慢。为了加快速度,我们可以创建一个包含MethodInfo的包映射器,该包使用Expression API或使用Reflection.Emit来调用方法。

但是,这样做需要我们维护MethodInfo包装器的签名映射。为此,我们需要一个代表Name + Signature的“键”,这样我们就可以在尝试调用方法时从我们的地图中快速找到所需的MethodWrapper(如果存在)。我正在寻找有关如何生成该密钥的建议。目前,我正在考虑简单地将MethodName与签名中每种类型的名称连接起来以生成密钥,但这对我来说似乎很慢。

寻找有关更好选择的建议。

编辑:

假设我有一个带有一个参数的方法:

DoSomething(object parameter);

签名是“DoSomething”+ typeof(object)

不要假设我传入签名“DoSomething”+ typeof(SomeTypeThatDerivesFromObject)

这些签名应“匹配”。

0 个答案:

没有答案