如果您有方法名称和参数类型数组(签名),则可以使用反射来获取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)
这些签名应“匹配”。