C#GetMethod与GetRuntimeMethod

时间:2019-07-06 11:38:23

标签: c# reflection

我正在使用GetRuntimeMethod来取消方法类型。一切正常,但我注意到有一个GetMethod。两者有什么区别?

this.target.GetType().GetRuntimeMethod(
    "MethodName",
    new System.Type[0]
)?.Invoke(targetObject, null);

从名称中我只能猜测GetRuntimeMethod在程序运行时有效。 GetMethod在程序编译期间有效吗?

使用一种代替另一种有什么好处吗? (最后一个问题可以从答案中扣除,这两者当然有什么区别)

1 个答案:

答案 0 :(得分:0)

GetMethod可用于System.Type的抽象基类RuntimeTypeGetRuntimeMethod在验证类型后实际上调用了GetMethod(并且不是RuntimeType的子代(不是用户定义的(可能是用户定义的)),因此它比{{1} }。如果Type未传递从GetMethod派生的类,则会引发异常。

来自documentation for Type

  

GetRuntimeMethod是允许多个实现的抽象基类。   系统将始终提供派生类RuntimeType。在   反射,创建所有以单词Runtime开头的类   系统中每个对象仅支持一次,并且支持比较操作。

this article还提供了有关扩展Type的详细信息,以及何时需要专门使用RuntimeType的细节。