当前位置: 代码迷 >> .NET Framework >> 怎么反射扩展方法
  详细解决方案

怎么反射扩展方法

热度:99   发布时间:2016-05-02 00:59:31.0
如何反射扩展方法
获得当前类或实例有多少扩展方法?并调用指定的扩展方法名?
如何办到?

------解决方案--------------------
事实上一个类的扩展方法并不属于该类,而是属于定义他的静态类,之所以能够调用,是因为编译器做了手脚的缘故,编译器遇到这种状况就会调用静态类的方法,通过其IL就可以看到真实的调用情况。。
------解决方案--------------------
IL:
man
.ctor
Assembly code
.method public hidebysig specialname rtspecialname         instance void  .ctor() cil managed{  // Code size       10 (0xa)  .maxstack  8  IL_0000:  ldarg.0  IL_0001:  call       instance void [mscorlib]System.Object::.ctor()  IL_0006:  nop  IL_0007:  nop  IL_0008:  nop  IL_0009:  ret} // end of method man::.ctor
------解决方案--------------------
你这个问题有什么实际的意义吗,你的应用环境是什么样的?IL应该是看不出来的,因为代码经编译后,扩展方法会替换为普通的静态方法,如果你的两行代码:第一行调用一个扩展方法,第二行调用一个静态类的静态方法,在编译后两者应该没有什么区别(如果硬要说有那可能就是第一个参数为this形式的参数),如果你非要用反射,只能使用定义该扩展方法的类,如上面的ex.
------解决方案--------------------
反射一般都是去创建一个已知的接口的实例。如果你需要用反射来得到一个扩展方法了,
是不是说你的设计需要改改了
  相关解决方案