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开头的所有类,并支持比较操作。”