OpCodes.TakesSingleByteArgument(OpCode) Metod

Definition

Returnerar sant eller falskt om det angivna opcode-värdet tar ett argument med en enda byte.

public:
 static bool TakesSingleByteArgument(System::Reflection::Emit::OpCode inst);
public static bool TakesSingleByteArgument(System.Reflection.Emit.OpCode inst);
static member TakesSingleByteArgument : System.Reflection.Emit.OpCode -> bool
Public Shared Function TakesSingleByteArgument (inst As OpCode) As Boolean

Parametrar

inst
OpCode

En instans av ett Opcode-objekt.

Returer

true eller false.

Kommentarer

Den här metoden kan användas för att hitta vilka MSIL-opcodes som är "kort formulär", för användning i optimerad kod.

TakesSingleByteArgument returnerar true om instansen OpCode tar ett argument med en enda byte i följande fall:

  • Opcode utför en greninstruktion till en bytestor adress (till exempel Br_S och Bgt_S).

  • Opcode skickar ett bytevärde till stacken (till exempel Ldc_I4_S).

  • Opcode refererar till en variabel eller ett argument via bytestorleken "short form" (till exempel Ldloc_S och Stloc_S).

Annars returneras false.

Exemplet nedan visar användningen av TakesSingleByteArgument genom att OpCodes reflektera över klassen och testa för att se om varje OpCode fält tar ett argument med en enda byte.


public static void Main()
{
   // We need a blank OpCode object for reference when calling FieldInfo.GetValue().

   OpCode blankOpCode = new OpCode();

   Type myOpCodesType = Type.GetType("System.Reflection.Emit.OpCodes");
   FieldInfo[] listOfOpCodes = myOpCodesType.GetFields();

   Console.WriteLine("Which OpCodes take single-byte arguments?");
   Console.WriteLine("-----------------------------------------");

   // Now, let's reflect on each FieldInfo and create an instance of the OpCode it represents.

   foreach (FieldInfo opCodeFI in listOfOpCodes)
   {
    object theOpCode = opCodeFI.GetValue(blankOpCode);
    
    Console.WriteLine("{0}: {1}", opCodeFI.Name,
              OpCodes.TakesSingleByteArgument((OpCode)theOpCode).ToString());
   }
}

Public Shared Sub Main()

   ' We need a blank OpCode object for reference when calling FieldInfo.GetValue().

   Dim blankOpCode As New OpCode()
   
   Dim myOpCodesType As Type = Type.GetType("System.Reflection.Emit.OpCodes")
   Dim listOfOpCodes As FieldInfo() = myOpCodesType.GetFields()
   
   Console.WriteLine("Which OpCodes take single-byte arguments?")
   Console.WriteLine("-----------------------------------------")
   
   ' Now, let's reflect on each FieldInfo and create an instance of the OpCode it represents.
   Dim opCodeFI As FieldInfo
   For Each opCodeFI In  listOfOpCodes
      Dim theOpCode As Object = opCodeFI.GetValue(blankOpCode)
      
      Console.WriteLine("{0}: {1}", opCodeFI.Name, _
            OpCodes.TakesSingleByteArgument(CType(theOpCode, OpCode)).ToString())
   Next opCodeFI

End Sub

Gäller för