ModuleBuilder.GetArrayMethod メソッド
配列クラスの名前付きメソッドを返します。
Public Function GetArrayMethod( _
ByVal arrayClass As Type, _ ByVal methodName As String, _ ByVal callingConvention As CallingConventions, _ ByVal returnType As Type, _ ByVal parameterTypes() As Type _) As MethodInfo
[C#]
public MethodInfo GetArrayMethod(TypearrayClass,stringmethodName,CallingConventionscallingConvention,TypereturnType,Type[] parameterTypes);
[C++]
public: MethodInfo* GetArrayMethod(Type* arrayClass,String* methodName,CallingConventionscallingConvention,Type* returnType,Type* parameterTypes[]);
[JScript]
public function GetArrayMethod(
arrayClass : Type,methodName : String,callingConvention : CallingConventions,returnType : Type,parameterTypes : Type[]) : MethodInfo;
パラメータ
- arrayClass
配列クラス。 - methodName
配列クラスのメソッドの名前。 - callingConvention
メソッドの呼び出し規約。 - returnType
メソッドの戻り値の型。 - parameterTypes
メソッドのパラメータの型。
戻り値
配列クラスの名前付きメソッド。
例外
例外の種類 | 条件 |
---|---|
ArgumentException | arrayClass が配列ではありません。 |
ArgumentNullException | arrayClass または methodName が null 参照 (Visual Basic では Nothing) です。 |
解説
GetArrayMethod は、定義が完了していない型の配列があり、 Array に定義されているメソッドにアクセスするときに役立ちます。たとえば、型を定義して、その型の配列をパラメータとするメソッドを定義できます。配列の要素にアクセスするには、 Array クラスのメソッドを呼び出す必要があります。
使用例
[Visual Basic, C#, C++] 次のコード例は、 GetArrayMethod を使用して、配列値を返すメソッドに対応する MethodInfo を取得する方法を示しています。
' 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 名前空間