Freigeben über


OpCodes.TakesSingleByteArgument-Methode

Gibt True oder False zurück, wenn der bereitgestellte Opcode ein Einzelbyte-Argument akzeptiert.

Namespace: System.Reflection.Emit
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public Shared Function TakesSingleByteArgument ( _
    inst As OpCode _
) As Boolean
'Usage
Dim inst As OpCode
Dim returnValue As Boolean

returnValue = OpCodes.TakesSingleByteArgument(inst)
public static bool TakesSingleByteArgument (
    OpCode inst
)
public:
static bool TakesSingleByteArgument (
    OpCode inst
)
public static boolean TakesSingleByteArgument (
    OpCode inst
)
public static function TakesSingleByteArgument (
    inst : OpCode
) : boolean

Parameter

  • inst
    Eine Instanz eines eines Opcodeobjekts.

Rückgabewert

True oder false.

Hinweise

Mit dieser Methode kann in optimiertem Code ermittelt werden, welche MSIL-Opcodes in "Kurzform" vorliegen.

TakesSingleByteArgument gibt true zurück, wenn die OpCode-Instanz in folgenden Fällen ein Einzelbyte-Argument akzeptiert:

  • Der Opcode führt eine Verzweigungsanweisung zu einer Adresse von 1 Byte Länge durch (z. B. Br_S und Bgt_S).

  • Der Opcode legt einen Bytewert auf dem Stapel ab (z. B. Ldc_I4_S).

  • Der Opcode verweist auf eine Variable oder ein Argument über die "Kurzform" von 1 Byte Länge (z. B. Ldloc_S und Stloc_S).

Andernfalls wird false zurückgegeben.

Das folgende Beispiel veranschaulicht die Verwendung von TakesSingleByteArgument durch Reflektieren auf die OpCodes-Klasse und durch Überprüfen, ob alle OpCode-Felder Einzelbyte-Argumente akzeptieren.

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 'Main
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());
   }

}
int main()
{
   
   // We need a blank OpCode Object for reference when calling FieldInfo::GetValue().
   OpCode blankOpCode;
   Type^ myOpCodesType = Type::GetType( "System.Reflection.Emit.OpCodes" );
   array<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.
   System::Collections::IEnumerator^ myEnum = listOfOpCodes->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      FieldInfo^ opCodeFI = safe_cast<FieldInfo^>(myEnum->Current);
      Object^ theOpCode = opCodeFI->GetValue( blankOpCode );
      Console::WriteLine( " {0}: {1}", opCodeFI->Name, OpCodes::TakesSingleByteArgument(  *dynamic_cast<OpCode^>(theOpCode) ) );
   }
}

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

OpCodes-Klasse
OpCodes-Member
System.Reflection.Emit-Namespace