Linguagem

OpCodes.TakesSingleByteArgument(OpCode) Método

Definição

Retorna verdadeiro ou falso se o opcode fornecido ocupar um argumento de um único 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

Parâmetros

inst
OpCode

Uma instância de um objeto Opcode.

Devoluções

true ou false.

Observações

Este método pode ser usado para identificar quais os opcodes MSIL que são "short form", para uso em código otimizado.

TakesSingleByteArgument retorna true se a OpCode instância tomar um argumento de um único byte nos seguintes casos:

  • O opcode executa uma instrução de desvio para um endereço do tamanho de um byte (por exemplo, Br_S e Bgt_S).

  • O opcode empurra um valor de byte para a pilha (por exemplo, Ldc_I4_S).

  • O opcode refere-se a uma variável ou argumento através da "forma curta" do tamanho de um byte (por exemplo, Ldloc_S e Stloc_S).

Caso contrário, ele retorna false.

O exemplo abaixo demonstra o uso de TakesSingleByteArgument refletindo sobre a OpCodes classe e testando para ver se cada OpCode campo assume um argumento de um único 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

Aplica-se a