다음을 통해 공유


OpCodes.TakesSingleByteArgument 메서드

주어진 opcode가 싱글바이트 인수를 사용할 경우 True나 false를 반환합니다.

네임스페이스: System.Reflection.Emit
어셈블리: mscorlib(mscorlib.dll)

구문

‘선언
Public Shared Function TakesSingleByteArgument ( _
    inst As OpCode _
) As Boolean
‘사용 방법
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

매개 변수

  • inst
    Opcode 개체의 인스턴스입니다.

반환 값

True 또는 false입니다.

설명

이 메서드를 사용하여 최적화된 코드에서 사용할 수 있게 "약식"으로 지정된 MSIL opcode를 찾을 수 있습니다.

OpCode 인스턴스가 다음 경우에 싱글바이트 인수를 사용하면 TakesSingleByteArgumenttrue를 반환합니다.

  • opcode는 바이트 크기의 주소에 대해 분기 명령을 수행합니다(예: Br_SBgt_S).

  • opcode는 바이트 값을 스택으로 푸시합니다(예: Ldc_I4_S).

  • opcode는 바이트 크기의 "약식" (예: Ldloc_SStloc_S)을 통해 변수나 인수를 참조합니다.

그렇지 않으면 false을 반환합니다.

아래 예제에서는 OpCodes 클래스에서 리플렉션한 다음 각 OpCode 필드가 싱글바이트 인수를 사용하는지 여부를 확인하여 TakesSingleByteArgument를 사용하는 방법을 보여 줍니다.

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) ) );
   }
}

플랫폼

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에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

참고 항목

참조

OpCodes 클래스
OpCodes 멤버
System.Reflection.Emit 네임스페이스