如何反射扩展方法
获得当前类或实例有多少扩展方法?并调用指定的扩展方法名?
如何办到?
[解决办法]
事实上一个类的扩展方法并不属于该类,而是属于定义他的静态类,之所以能够调用,是因为编译器做了手脚的缘故,编译器遇到这种状况就会调用静态类的方法,通过其IL就可以看到真实的调用情况。。
[解决办法]
IL:
man
.ctor
.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.
[解决办法]
反射一般都是去创建一个已知的接口的实例。如果你需要用反射来得到一个扩展方法了,
是不是说你的设计需要改改了