ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

yield return Il代码讲解

2021-09-22 02:02:20  阅读:197  来源: 互联网

标签:__ 12 return System yield instance Collections Il IL


 

 

.class nested private auto ansi sealed beforefieldinit '<GetEnumerator>d__12'
    extends [System.Runtime]System.Object
    implements class [System.Runtime]System.Collections.Generic.IEnumerator`1<object>,
               [System.Runtime]System.Collections.IEnumerator,
               [System.Runtime]System.IDisposable

//这个位置相当于以上等于 private class  sealed <GetEnumerator>d__12:object,IEnumerator,IEnumerator,IDisposable
// nested :嵌套    
//implements  :实现接口
//extends:是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,
{ .custom instance void [System.Runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) // Fields 字段 .field private int32 '<>1__state' .field private object '<>2__current' .field public class School.ClassOfStudent '<>4__this' .field private int32 '<index>5__1' // Methods
//
.method public hidebysig specialname rtspecialname instance void .ctor ( int32 '<>1__state' ) cil managed
//cil managed:托管代码 { .custom instance void [System.Runtime]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 01 00 00 00 ) // Method begins at RVA 0x2369 // Code size 15 (0xf) .maxstack 8 // { IL_0000: ldarg.0 // (no C# code) IL_0001: call instance void [System.Runtime]System.Object::.ctor() // this.<>1__state = <>1__state; IL_0006: nop IL_0007: ldarg.0 IL_0008: ldarg.1 IL_0009: stfld int32 School.ClassOfStudent/'<GetEnumerator>d__12'::'<>1__state' // } IL_000e: ret } // end of method '<GetEnumerator>d__12'::.ctor .method private final hidebysig newslot virtual instance void System.IDisposable.Dispose () cil managed { .custom instance void [System.Runtime]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 01 00 00 00 ) .override method instance void [System.Runtime]System.IDisposable::Dispose() // Method begins at RVA 0x2379 // Code size 1 (0x1) .maxstack 8 // } IL_0000: ret } // end of method '<GetEnumerator>d__12'::System.IDisposable.Dispose .method private final hidebysig newslot virtual instance bool MoveNext () cil managed { .override method instance bool [System.Runtime]System.Collections.IEnumerator::MoveNext() // Method begins at RVA 0x237c // Code size 133 (0x85) .maxstack 3 .locals init ( [0] int32, [1] int32, [2] bool ) // switch (<>1__state) IL_0000: ldarg.0 IL_0001: ldfld int32 School.ClassOfStudent/'<GetEnumerator>d__12'::'<>1__state' IL_0006: stloc.0 // (no C# code) IL_0007: ldloc.0 IL_0008: brfalse.s IL_0012 IL_000a: br.s IL_000c IL_000c: ldloc.0 IL_000d: ldc.i4.1 IL_000e: beq.s IL_0014 IL_0010: br.s IL_0016 IL_0012: br.s IL_0018 // return false; IL_0014: br.s IL_004f IL_0016: ldc.i4.0 IL_0017: ret // <>1__state = -1; IL_0018: ldarg.0 IL_0019: ldc.i4.m1 IL_001a: stfld int32 School.ClassOfStudent/'<GetEnumerator>d__12'::'<>1__state' // <index>5__1 = 0; IL_001f: nop IL_0020: ldarg.0 IL_0021: ldc.i4.0 IL_0022: stfld int32 School.ClassOfStudent/'<GetEnumerator>d__12'::'<index>5__1' // break; IL_0027: br.s IL_0067 // <>2__current = <>4__this.students[<index>5__1]; IL_0029: nop IL_002a: ldarg.0 IL_002b: ldarg.0 IL_002c: ldfld class School.ClassOfStudent School.ClassOfStudent/'<GetEnumerator>d__12'::'<>4__this' IL_0031: ldfld class [System.Collections]System.Collections.Generic.List`1<class School.Student> School.ClassOfStudent::students IL_0036: ldarg.0 IL_0037: ldfld int32 School.ClassOfStudent/'<GetEnumerator>d__12'::'<index>5__1' IL_003c: callvirt instance !0 class [System.Collections]System.Collections.Generic.List`1<class School.Student>::get_Item(int32) IL_0041: stfld object School.ClassOfStudent/'<GetEnumerator>d__12'::'<>2__current' // <>1__state = 1; IL_0046: ldarg.0 IL_0047: ldc.i4.1 IL_0048: stfld int32 School.ClassOfStudent/'<GetEnumerator>d__12'::'<>1__state' // return true; IL_004d: ldc.i4.1 IL_004e: ret // <>1__state = -1; IL_004f: ldarg.0 IL_0050: ldc.i4.m1 IL_0051: stfld int32 School.ClassOfStudent/'<GetEnumerator>d__12'::'<>1__state' // <index>5__1++; IL_0056: nop IL_0057: ldarg.0 IL_0058: ldfld int32 School.ClassOfStudent/'<GetEnumerator>d__12'::'<index>5__1' IL_005d: stloc.1 // if (<index>5__1 < <>4__this.students.Count) IL_005e: ldarg.0 IL_005f: ldloc.1 IL_0060: ldc.i4.1 IL_0061: add IL_0062: stfld int32 School.ClassOfStudent/'<GetEnumerator>d__12'::'<index>5__1' IL_0067: ldarg.0 IL_0068: ldfld int32 School.ClassOfStudent/'<GetEnumerator>d__12'::'<index>5__1' IL_006d: ldarg.0 IL_006e: ldfld class School.ClassOfStudent School.ClassOfStudent/'<GetEnumerator>d__12'::'<>4__this' IL_0073: ldfld class [System.Collections]System.Collections.Generic.List`1<class School.Student> School.ClassOfStudent::students IL_0078: callvirt instance int32 class [System.Collections]System.Collections.Generic.List`1<class School.Student>::get_Count() IL_007d: clt IL_007f: stloc.2 IL_0080: ldloc.2 IL_0081: brtrue.s IL_0029 // return false; IL_0083: ldc.i4.0 IL_0084: ret } // end of method '<GetEnumerator>d__12'::MoveNext .method private final hidebysig specialname newslot virtual instance object 'System.Collections.Generic.IEnumerator<System.Object>.get_Current' () cil managed { .custom instance void [System.Runtime]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 01 00 00 00 ) .override method instance !0 class [System.Runtime]System.Collections.Generic.IEnumerator`1<object>::get_Current() // Method begins at RVA 0x240d // Code size 7 (0x7) .maxstack 8 // return <>2__current; IL_0000: ldarg.0 IL_0001: ldfld object School.ClassOfStudent/'<GetEnumerator>d__12'::'<>2__current' IL_0006: ret } // end of method '<GetEnumerator>d__12'::'System.Collections.Generic.IEnumerator<System.Object>.get_Current' .method private final hidebysig newslot virtual instance void System.Collections.IEnumerator.Reset () cil managed { .custom instance void [System.Runtime]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 01 00 00 00 ) .override method instance void [System.Runtime]System.Collections.IEnumerator::Reset() // Method begins at RVA 0x2415 // Code size 6 (0x6) .maxstack 8 // throw new NotSupportedException(); IL_0000: newobj instance void [System.Runtime]System.NotSupportedException::.ctor() IL_0005: throw } // end of method '<GetEnumerator>d__12'::System.Collections.IEnumerator.Reset .method private final hidebysig specialname newslot virtual instance object System.Collections.IEnumerator.get_Current () cil managed { .custom instance void [System.Runtime]System.Diagnostics.DebuggerHiddenAttribute::.ctor() = ( 01 00 00 00 ) .override method instance object [System.Runtime]System.Collections.IEnumerator::get_Current() // Method begins at RVA 0x241c // Code size 7 (0x7) .maxstack 8 // return <>2__current; IL_0000: ldarg.0 IL_0001: ldfld object School.ClassOfStudent/'<GetEnumerator>d__12'::'<>2__current' IL_0006: ret } // end of method '<GetEnumerator>d__12'::System.Collections.IEnumerator.get_Current // Properties .property instance object 'System.Collections.Generic.IEnumerator<System.Object>.Current'() { .get instance object School.ClassOfStudent/'<GetEnumerator>d__12'::'System.Collections.Generic.IEnumerator<System.Object>.get_Current'() } .property instance object System.Collections.IEnumerator.Current() { .get instance object School.ClassOfStudent/'<GetEnumerator>d__12'::System.Collections.IEnumerator.get_Current() } } // end of class <GetEnumerator>d__12

 

标签:__,12,return,System,yield,instance,Collections,Il,IL
来源: https://www.cnblogs.com/cdaniu/p/15318419.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有