首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET Framework >

怎么反射扩展方法

2012-01-10 
如何反射扩展方法获得当前类或实例有多少扩展方法?并调用指定的扩展方法名?如何办到?[解决办法]事实上一个

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

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

热点排行