OpCodes.TakesSingleByteArgument(OpCode) Méthode

Définition

Retourne true ou false si l’opcode fourni prend un argument d’octet unique.

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

Paramètres

inst
OpCode

Instance d’un objet Opcode.

Retours

true ou false.

Remarques

Cette méthode peut être utilisée pour rechercher les opcodes MSIL « short form », à utiliser dans le code optimisé.

TakesSingleByteArgument retourne true si l’instance OpCode prend un argument d’octet unique dans les cas suivants :

  • L’opcode effectue une instruction de branche sur une adresse de taille d’octet (par exemple, Br_S et Bgt_S).

  • L’opcode envoie (push) une valeur d’octet sur la pile (par exemple). Ldc_I4_S

  • L’opcode fait référence à une variable ou un argument par le biais de la taille d’octet « short form » (par exemple, Ldloc_S et Stloc_S).

Sinon, falseest retourné.

L’exemple ci-dessous illustre l’utilisation en TakesSingleByteArgument réfléchissant à la OpCodes classe et au test pour voir si chaque OpCode champ prend un argument sur un octet.


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

S’applique à