C#GetMethod vs GetRuntimeMethod

C#GetMethod vs GetRuntimeMethod,c#,reflection,C#,Reflection,我正在使用GetRuntimeMethod从类型中获取方法。一切正常,但我注意到有一个GetMethod。这两者的区别是什么 this.target.GetType().GetRuntimeMethod( "MethodName", new System.Type[0] )?.Invoke(targetObject, null); 从这些名称中,我只能猜测GetRuntimeMethod在程序运行时起作用。而GetMethod在程序编译期间是否有效 使用一个而不是另一个有什么好

我正在使用
GetRuntimeMethod
从类型中获取方法。一切正常,但我注意到有一个
GetMethod
。这两者的区别是什么

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

从这些名称中,我只能猜测
GetRuntimeMethod
在程序运行时起作用。而
GetMethod
在程序编译期间是否有效


使用一个而不是另一个有什么好处吗?(最后一个问题当然可以从这两个问题之间的区别的答案中扣除)

GetMethod在
System.Type
上工作,它是
RuntimeType
的抽象基类
GetRuntimeMethod
在验证类型后调用
GetMethod
,该类型实际上是
RuntimeType
(并且不是
类型的子级(可能是用户定义的),因此它比
GetMethod
慢<如果未传递从
RuntimeType
派生的类,则code>GetRuntimeMethod
将引发异常

从:

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


还提供了有关扩展
类型
以及何时可能需要
运行时类型
的详细信息。

“和GetMethod在程序编译期间工作?”方法在程序编译期间如何工作?这难道不需要编译器实际执行代码吗?;-)关于为什么有两种看似等效的方法,请查看文档中两种方法的“应用于”部分。现在,为什么各个平台版本的设计师/架构师选择提供或不提供某些方法,很不幸,我没有洞察,只能对该主题进行疯狂、盲目、很可能误导和错误的猜测:-(@elgonzo,这就是为什么我称之为“猜测”例如,编译器可以识别这是编译时方法,并在编译时获取对该方法的引用并优化此调用。而
System.Reflection
GetRuntimeMethod
可以在运行时获取该方法。而
GetMethod
将只是对
运行时
反射的模仿de>GetRuntimeMethod
仅对
RuntimeType
有效,否则会引发异常。
GetMethod
SystemType
有效,
RuntimeType
的抽象基类
GetRuntimeMethod
在验证类型实际上是
RuntimeType
后调用
GetMethod
(还可能是什么?),因此它比
GetMethod
慢。文档中的这一段似乎也很相关:“
Type
是一个允许多个实现的抽象基类。系统将始终提供派生类
RuntimeType
。在反射中,系统中每个对象仅创建一次以单词Runtime开头的所有类,并支持比较操作。”