令人激动的“扩展”
4. 扩展方法是如何实现的?
下面我们来看一下扩展方法是如何通过编译器来实现的,我把上面程序编译后生成的IL代码打印如下,相信大家从这段代码中就可以简单了解到C#3.0编译器是如何实现扩展方法的。
看IL_0009这行IL代码,我们在程序中调用的是扩展方法AutoCooling, 编译器在遇到这个方式时发现ForzenSword类型并不包含这个方法,于是编译器从引用的数据集中找到静态类Program中的静态方法AutoCooling, 调用之即可。.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 16 (0x10)
.maxstack 2
.locals init ([0] class Game.ForzenSword sword)
IL_0000: nop
IL_0001: newobj instance void Game.ForzenSword::.ctor()
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: ldc.i4.5
//下面这行代码我们调用了扩展方法AutoCooling
IL_0009: call void ConsoleApplication8.Program::AutoCooling(class Game.ForzenSword,
int32)
IL_000e: nop
IL_000f: ret
} // end of method Program::Main
通过上面的介绍,相信读者朋友们对于微软的这项新技术已经有了一个大致的了解,目前微软在扩展方法方向上最大的应用就是LINQ语言了,有兴趣的读者可以进一步去挖掘其中更深一层的内容,另外,扩展方法在系统构架方面也有着很大的作用,赶紧来体验一下吧:)。
0
相关文章
.method private hidebysig static void Main(string[] args) cil managed