提供されたオペコードが 1 バイト引数をとる場合は、true または false を返します。
Public Shared Function TakesSingleByteArgument( _
ByVal inst As OpCode _) As Boolean
[C#]
public static bool TakesSingleByteArgument(OpCodeinst);
[C++]
public: static bool TakesSingleByteArgument(OpCodeinst);
[JScript]
public static function TakesSingleByteArgument(
inst : OpCode) : Boolean;
パラメータ
- inst
Opcode オブジェクトのインスタンス。
戻り値
True または false 。
解説
このメソッドは、どの MSIL オペコードが最適化されたコードで使用する "短い形式" かを見つけるときに使用できます。
OpCode のインスタンスが以下の場合に 1 バイトの引数をとる場合、 TakesSingleByteArgument は true を返します。
- オペコードがバイト サイズのアドレスへの分岐命令を実行する (たとえば、 Br_S および Bgt_S)。
- オペコードがスタックにバイト値をプッシュする (たとえば、 Ldc_I4_S)。
- オペコードがバイト サイズの "短い形式" を通じて変数または引数を参照する (たとえば、 Ldloc_S および Stloc_S)。
それ以外の場合は、 false を返します。
TakesSingleByteArgument を使用し、 OpCodes クラスにリフレクションして、1 バイト引数をとるかどうかを各 OpCode フィールドでテストする例を次に示します。
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
[C#]
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());
}
}
[C++]
int main() {
// We need a blank OpCode Object for reference when calling FieldInfo::GetValue().
OpCode blankOpCode;
Type* myOpCodesType = Type::GetType(S"System.Reflection.Emit.OpCodes");
FieldInfo* listOfOpCodes[] = myOpCodesType->GetFields();
Console::WriteLine(S"Which OpCodes take single-Byte arguments?");
Console::WriteLine(S"-----------------------------------------");
// 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 = __try_cast<FieldInfo*>(myEnum->Current);
Object* theOpCode = opCodeFI->GetValue(__box(blankOpCode));
Console::WriteLine(S" {0}: {1}", opCodeFI->Name,
__box(OpCodes::TakesSingleByteArgument(*dynamic_cast<OpCode*>(theOpCode))));
}
}
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ