sziasztok!

egy kis problémám lenne IL értelmezéssel, van itt vki aki csinált már hasonlót?


Kód:
.method public hidebysig specialname instance valuetype RedGate.Licensing.Client.TrialStatus 
          get_TrialStatus() cil managed
  {
    // Code size       7 (0x7)
    .maxstack  1
    IL_0000:  ldarg.0
    IL_0001:  ldfld      valuetype RedGate.Licensing.Client.TrialStatus RedGate.Licensing.Client.Licence::_1
    IL_0006:  ret
  } // end of method Licence::get_TrialStatus
ezt még értem.

na de nézzünk egy kicsit összetettebbet:

Kód:
.method public hidebysig specialname instance int32 
          get_DaysLeftInTrial() cil managed
  {
    // Code size       50 (0x32)
    .maxstack  3
    .locals init (valuetype [mscorlib]System.TimeSpan V_0,
             int32 V_1,
             valuetype [mscorlib]System.DateTime V_2)
    IL_0000:  ldarg.0
    IL_0001:  call       instance valuetype RedGate.Licensing.Client.TrialStatus RedGate.Licensing.Client.Licence::get_TrialStatus()
    IL_0006:  ldc.i4.1
    IL_0007:  beq.s      IL_000b

    IL_0009:  ldc.i4.0
    IL_000a:  ret

    IL_000b:  call       valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_UtcNow()
    IL_0010:  stloc.2
    IL_0011:  ldloca.s   V_2
    IL_0013:  ldarg.0
    IL_0014:  ldfld      valuetype [mscorlib]System.DateTime RedGate.Licensing.Client.Licence::_2
    IL_0019:  call       instance valuetype [mscorlib]System.TimeSpan [mscorlib]System.DateTime::Subtract(valuetype [mscorlib]System.DateTime)
    IL_001e:  stloc.0
    IL_001f:  ldc.i4.s   14
    IL_0021:  ldloca.s   V_0
    IL_0023:  call       instance int32 [mscorlib]System.TimeSpan::get_Days()
    IL_0028:  sub
    IL_0029:  stloc.1
    IL_002a:  ldloc.1
    IL_002b:  ldc.i4.0
    IL_002c:  bge.s      IL_0030

    IL_002e:  ldc.i4.0
    IL_002f:  stloc.1
    IL_0030:  ldloc.1
    IL_0031:  ret
  } // end of method Licence::get_DaysLeftInTrial
nagyon megköszönném, ha vki elmesélné sorról sorra, mi történik.

azt értem, hogy:
IL_0000: betölti az arg-okat a stackra.
IL_0001: meghívja a get_TrialStatus-t
IL_0006: ez a IL_0001 -t tárolja memóriában? itt jönnek a kérdések
IL_0007: összehasonlítja az IL_0006-t ezzel:IL_000b

csakhogy az egyik date a masik meg RedGate.Licensing.Client.TrialStatus type, ami igazabol csak egy enum.

de nem igazan ertem, hogy ez utan mi történik.

vki felvilágosítana? megköszönném.