OpCodes.TakesSingleByteArgument(OpCode) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí hodnotu true nebo false, pokud zadaný opcode přebírá jeden bajt argument.
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
Parametry
- inst
- OpCode
Instance Opcode objektu.
Návraty
true
nebo false
:
Poznámky
Pomocí této metody lze zjistit, které operační kódy jazyka MSIL jsou "krátké" pro použití v optimalizovaném kódu.
TakesSingleByteArgument
vrátí hodnotu true
, pokud OpCode instance vezme jeden bajt argument v následujících případech:
Opcode provede větev na adresu o velikosti bajtu (například Br_S a Bgt_S).
Opcode nasdílí do zásobníku hodnotu bajtu (například Ldc_I4_S).
Opcode odkazuje na proměnnou nebo argument prostřednictvím "krátkého formuláře" o velikosti bajtu (například Ldloc_S a Stloc_S).
V opačném případě vrátí false
.
Následující příklad demonstruje použití TakesSingleByteArgument
třídy tím, že se promítne do OpCodes
třídy a testuje, jestli každé OpCode
pole přebírá jednobajtů argument.
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) ) );
}
}
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