日期:2014-05-20  浏览次数:20921 次

如何反射扩展方法
获得当前类或实例有多少扩展方法?并调用指定的扩展方法名?
如何办到?

------解决方案--------------------
事实上一个类的扩展方法并不属于该类,而是属于定义他的静态类,之所以能够调用,是因为编译器做了手脚的缘故,编译器遇到这种状况就会调用静态类的方法,通过其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.
------解决方案--------------------
反射一般都是去创建一个已知的接口的实例。如果你需要用反射来得到一个扩展方法了,
是不是说你的设计需要改改了