当前位置: 首页 > 编程语言 > C#

为什么CLR要为匿名方法创建新的类?分享

时间:2023-04-10 23:32:26 C#

为什么CLR要为匿名方法创建新的类?我在我的项目中使用匿名函数。在知道我在想什么之前,C#编译器只生成一个方法,其代码在同一类中使用匿名方法。然而,在IL中反编译这段代码后,我看到CLR创建了一个新类。publicclassComparer{publicdelegateintGreater(inta,intb);publicintGreat(Greatergreater,inta,intb){returngreater(a,b);}}staticvoidMain(string[]args){intvalueOfA=11,valueOfB=23,valueOfC=42;比较器comparer=newComparer();Console.WriteLine("Thegreaterist:{0}",comparer.Great(delegate(inta,intb){int[]numbers=newint[]{a,b,valueOfC};returnMath.Max(Math.Max(a,b),valueOfC);},valueOfA,valueOfB));}这是Main方法的反编译IL代码:.methodprivatehidebysigstaticvoidMain(string[]args)cilmanaged{.entrypoint//Codesize65(0x41).maxstack5.localsinit([0]int32valueOfA,[1]int32valueOfB,[2]classCh04.Comparercomparer,[3]classCh04.Program/'c__DisplayClass1''CS$8__locals2')//这里是...}如果没有捕获它,如果闭包中有变量,C#编译器将在类中创建一个私有方法-将创建内部类。第12章详细信息-代理和Lambda表达式C#教程到此结束:CLR为什么要为匿名方法创建新类?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——intlocal=42;...Where(value=>{returntrue;})...//私有方法...Where(value=>{returnvalue==local;})...//class本文收集自上网,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: