OpCodes.TakesSingleByteArgument(OpCode) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Retourneert waar of onwaar als de opgegeven opcode één byteargument gebruikt.
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
Parameters
- inst
- OpCode
Een exemplaar van een Opcode-object.
Retouren
true of false.
Opmerkingen
Deze methode kan worden gebruikt om te bepalen welke MSIL-opcodes 'korte vorm' zijn voor gebruik in geoptimaliseerde code.
TakesSingleByteArgument retourneert true als het OpCode exemplaar in de volgende gevallen één byteargument gebruikt:
De opcode voert een vertakkingsinstructie uit naar een byte-formaatadres (bijvoorbeeld Br_S en Bgt_S).
De opcode pusht een bytewaarde naar de stack (bijvoorbeeld Ldc_I4_S).
De opcode verwijst naar een variabele of argument via de 'korte vorm' van de byte (bijvoorbeeld Ldloc_S en Stloc_S).
Anders wordt false geretourneerd.
In het onderstaande voorbeeld wordt het gebruik TakesSingleByteArgument gedemonstreerd door na te denken over de OpCodes klasse en te testen om te zien of elk OpCode veld een argument met één byte gebruikt.
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