次の方法で共有


ModuleBuilder.GetArrayMethodToken メソッド

配列クラスの名前付きメソッドのトークンを返します。

Public Function GetArrayMethodToken( _
   ByVal arrayClass As Type, _   ByVal methodName As String, _   ByVal callingConvention As CallingConventions, _   ByVal returnType As Type, _   ByVal parameterTypes() As Type _) As MethodToken
[C#]
public MethodToken GetArrayMethodToken(TypearrayClass,stringmethodName,CallingConventionscallingConvention,TypereturnType,Type[] parameterTypes);
[C++]
public: MethodToken GetArrayMethodToken(Type* arrayClass,String* methodName,CallingConventionscallingConvention,Type* returnType,Type* parameterTypes[]);
[JScript]
public function GetArrayMethodToken(
   arrayClass : Type,methodName : String,callingConvention : CallingConventions,returnType : Type,parameterTypes : Type[]) : MethodToken;

パラメータ

  • arrayClass
    配列の Type オブジェクト。
  • methodName
    メソッドの名前を格納している文字列。
  • callingConvention
    メソッドの呼び出し規約。
  • returnType
    メソッドの戻り値の型。
  • parameterTypes
    メソッドのパラメータの型。

戻り値

配列クラスの名前付きメソッドのトークン。

例外

例外の種類 条件
ArgumentException arrayClass が配列ではありません。

または

methodName の長さが 0 です。

ArgumentNullException arrayClass または methodName が null 参照 (Visual Basic では Nothing) です。

解説

このメソッドは、 GetArrayMethod に似ていますが、メソッドそのものではなく、配列メソッドのトークンを返します。

使用例

[Visual Basic, C#, C++] 次のコード例は、 GetArrayMethod を使用して、配列値を返すメソッドに対応する MethodToken を取得する方法を示しています。

 
' Define a dynamic module in "TempAssembly" assembly.
Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.DefineDynamicModule("TempModule")
' Define a runtime class with specified name and attributes.
Dim myTypeBuilder As TypeBuilder = _
            myModuleBuilder.DefineType("TempClass", TypeAttributes.Public)
Dim myParamArray() As Type = New Type() {GetType(Array)}
' Add 'SortArray' method to the class, with the given signature.
Dim myMethod As MethodBuilder = _
   myTypeBuilder.DefineMethod("SortArray", MethodAttributes.Public, _
   GetType(Array), myParamArray)

Dim myArrayClass(0) As Type
Dim parameterTypes() As Type = New Type() {GetType(Array)}
' Get the 'MethodInfo' object corresponding to 'Sort' method of 'Array' class.
Dim myMethodInfo As MethodInfo = _
   myModuleBuilder.GetArrayMethod(myArrayClass.GetType(), "Sort", _
   CallingConventions.Standard, Nothing, parameterTypes)
' Get the token corresponding to 'Sort' method of 'Array' class.
Dim myMethodToken As MethodToken = _
      myModuleBuilder.GetArrayMethodToken(myArrayClass.GetType(), _
      "Sort", CallingConventions.Standard, Nothing, parameterTypes)
Console.WriteLine("Token used by module to identify the 'Sort' method" + _
                  " of 'Array' class is : {0:x} ", myMethodToken.Token)
Dim methodIL As ILGenerator = myMethod.GetILGenerator()
methodIL.Emit(OpCodes.Ldarg_1)
methodIL.Emit(OpCodes.Call, myMethodInfo)
methodIL.Emit(OpCodes.Ldarg_1)
methodIL.Emit(OpCodes.Ret)
' Complete the creation of type.
myTypeBuilder.CreateType()

[C#] 
// Define a dynamic module in "TempAssembly" assembly.
ModuleBuilder myModuleBuilder = myAssemblyBuilder.
                              DefineDynamicModule("TempModule");
// Define a runtime class with specified name and attributes.
TypeBuilder myTypeBuilder = myModuleBuilder.DefineType
                           ("TempClass",TypeAttributes.Public);
Type[] paramArray = {typeof(Array)};
// Add 'SortArray' method to the class, with the given signature.
MethodBuilder myMethod = myTypeBuilder.DefineMethod("SortArray", 
                          MethodAttributes.Public,typeof(Array),paramArray);

Type[] myArrayClass = new Type[1];
Type[] parameterTypes = {typeof(Array)};
// Get the 'MethodInfo' object corresponding to 'Sort' method of 'Array' class.
MethodInfo myMethodInfo=myModuleBuilder.GetArrayMethod(
            myArrayClass.GetType(),"Sort",CallingConventions.Standard,
                                                                         null,parameterTypes);
// Get the token corresponding to 'Sort' method of 'Array' class.
MethodToken myMethodToken=myModuleBuilder.GetArrayMethodToken(
            myArrayClass.GetType(),"Sort",CallingConventions.Standard,
                                                                        null,parameterTypes);
Console.WriteLine("Token used by module to identify the 'Sort' method"
                            + " of 'Array' class is : {0:x} ",myMethodToken.Token);

ILGenerator methodIL = myMethod.GetILGenerator();
methodIL.Emit(OpCodes.Ldarg_1);
methodIL.Emit(OpCodes.Call,myMethodInfo);
methodIL.Emit(OpCodes.Ldarg_1);
methodIL.Emit(OpCodes.Ret);

// Complete the creation of type.
myTypeBuilder.CreateType();

[C++] 
// Define a dynamic module in "TempAssembly" assembly.
ModuleBuilder* myModuleBuilder = myAssemblyBuilder->
   DefineDynamicModule(S"TempModule");
// Define a runtime class with specified name and attributes.
TypeBuilder* myTypeBuilder = myModuleBuilder->DefineType
   (S"TempClass",TypeAttributes::Public);
Type* paramArray[] = {__typeof(Array)};
// Add 'SortArray' method to the class, with the given signature.
MethodBuilder* myMethod = myTypeBuilder->DefineMethod(S"SortArray", 
   MethodAttributes::Public,__typeof(Array),paramArray);

Type* myArrayClass[] = new Type*[1];
Type* parameterTypes[] = {__typeof(Array)};
// Get the 'MethodInfo' object corresponding to 'Sort' method of 'Array' class.
MethodInfo* myMethodInfo=myModuleBuilder->GetArrayMethod(
   myArrayClass->GetType(),S"Sort",CallingConventions::Standard,
   0,parameterTypes);
// Get the token corresponding to 'Sort' method of 'Array' class.
MethodToken myMethodToken=myModuleBuilder->GetArrayMethodToken(
   myArrayClass->GetType(),S"Sort",CallingConventions::Standard,
   0,parameterTypes);
Console::WriteLine(S"Token used by module to identify the 'Sort' method"
   S" of 'Array' class is : {0:x} ", __box(myMethodToken.Token));

ILGenerator* methodIL = myMethod->GetILGenerator();
methodIL->Emit(OpCodes::Ldarg_1);
methodIL->Emit(OpCodes::Call,myMethodInfo);
methodIL->Emit(OpCodes::Ldarg_1);
methodIL->Emit(OpCodes::Ret);

// Complete the creation of type.
myTypeBuilder->CreateType();

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

ModuleBuilder クラス | ModuleBuilder メンバ | System.Reflection.Emit 名前空間