OpCodes.TakesSingleByteArgument(OpCode) Methode

Definition

Gibt true oder false zurück, wenn der angegebene Opcode ein einzelnes Byte-Argument akzeptiert.

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

Parameter

inst
OpCode

Eine Instanz eines Opcode-Objekts.

Gibt zurück

true oder false.

Hinweise

Diese Methode kann verwendet werden, um zu ermitteln, welche MSIL-Opcodes "Kurzform" sind, für die Verwendung in optimiertem Code.

TakesSingleByteArgument gibt zurück true , wenn die OpCode Instanz in den folgenden Fällen ein einzelnes Byte-Argument verwendet:

  • Der Opcode führt eine Verzweigungsanweisung für eine Bytegröße (z Br_S . B. und Bgt_S) aus.

  • Der Opcode verschiebt einen Bytewert auf den Stapel (z. B Ldc_I4_S. ).

  • Die Opcode verweist auf eine Variable oder ein Argument über die Bytegröße "Kurzform" (z Ldloc_S . B. und Stloc_S).

Andernfalls wird falsezurückgegeben.

Im folgenden Beispiel wird die Verwendung TakesSingleByteArgument veranschaulicht, indem die Klasse berücksichtigt OpCodes und getestet wird, ob jedes OpCode Feld ein Einzelbyte-Argument verwendet.


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

Gilt für: