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