MethodBuilder.MakeGenericMethod メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > MethodBuilder.MakeGenericMethod メソッドの意味・解説 

MethodBuilder.MakeGenericMethod メソッド

メモ : このメソッドは、.NET Framework version 2.0新しく追加されたものです。

指定したジェネリック型引数使用して現在のジェネリック メソッドの定義から構築されジェネリック メソッド返します

名前空間: System.Reflection.Emit
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public Overrides Function
 MakeGenericMethod ( _
    ParamArray typeArguments As Type() _
) As MethodInfo
Dim instance As MethodBuilder
Dim typeArguments As Type()
Dim returnValue As MethodInfo

returnValue = instance.MakeGenericMethod(typeArguments)
public override MethodInfo MakeGenericMethod (
    params Type[] typeArguments
)
public:
virtual MethodInfo^ MakeGenericMethod (
    ... array<Type^>^ typeArguments
) override
public MethodInfo MakeGenericMethod (
    Type[] typeArguments
)
public override function MakeGenericMethod
 (
    ... typeArguments : Type[]
) : MethodInfo

パラメータ

typeArguments

ジェネリック メソッド型引数を表す Type オブジェクト配列

戻り値
指定したジェネリック型引数使用して現在のジェネリック メソッドの定義から構築されジェネリック メソッドを表す MethodInfo。

解説解説
使用例使用例

不完全な型の不完全なジェネリック メソッドの定義から構築されメソッド作成するコード例次に示します

この例では、単一の型で遷移アセンブリモジュール作成しM メソッド追加します次に、DefineGenericParameters メソッド使用して型パラメータ T を追加することによってメソッドジェネリックにします。型パラメータは、メソッドパラメータの型として使用され戻り値の型としても使用されます。ジェネリック メソッドの定義には本体提供されず、外側の型は完了しません。次にMakeGenericMethod メソッド使用して構築されメソッド M<String> (Visual Basic では M(Of String)) を作成しますMakeGenericMethod メソッドによって返される MethodInfoサブクラスでは、パラメータに対してリフレクション実行できないため、このコードには出力はありません。

メモメモ

MakeGenericMethod使用した他のコード例については、DefineGenericParametersトピック参照してくださいまた、MakeGenericMethod は、ジェネリック型使ったコード出力する用途でも幅広く使用されます。詳細については、方法 : リフレクション出力使用してジェネリック メソッド定義するトピック参照してください

Imports System
Imports System.Reflection
Imports System.Reflection.Emit

Class Example

    Public Shared Sub Main()
    
        ' Define a transient dynamic assembly (only to run, not
        ' to save) with one module and a type "Test".
        ' 
        Dim aName As AssemblyName = New
 AssemblyName("MyDynamic")
        Dim ab As AssemblyBuilder = _
            AppDomain.CurrentDomain.DefineDynamicAssembly( _
                aName, _
                AssemblyBuilderAccess.Run)
        Dim mb As ModuleBuilder = ab.DefineDynamicModule(aName.Name)
        Dim tb As TypeBuilder = mb.DefineType("Test")

        ' Add a Public Shared method "M" to Test, and make
 it a
        ' generic method with one type parameter named "T").
        '
        Dim meb As MethodBuilder = tb.DefineMethod("M",
 _
            MethodAttributes.Public Or MethodAttributes.Static)
        Dim typeParams() As GenericTypeParameterBuilder
 = _
            meb.DefineGenericParameters(New String()
 { "T" })

        ' Give the method one parameter, of type T, and a 
        ' return type of T.
        meb.SetParameters(typeParams)
        meb.SetReturnType(typeParams(0))

        ' Create a MethodInfo for M(Of String), which can be used 
        ' in emitted code. This is possible even though the method
        ' does not yet have a body, and the enclosing type is not
        ' created.
        Dim mi As MethodInfo = _
            meb.MakeGenericMethod(GetType(String))
        ' Note that this is actually a subclass of MethodInfo, 
        ' which has rather limited capabilities -- for
        ' example, you cannot reflect on its parameters.
    End Sub
End Class
using System;
using System.Reflection;
using System.Reflection.Emit;

class Example
{
    public static void Main()
    {
        // Define a transient dynamic assembly (only to run, not
        // to save) with one module and a type "Test".
        // 
        AssemblyName aName = new AssemblyName("MyDynamic");
        AssemblyBuilder ab = 
            AppDomain.CurrentDomain.DefineDynamicAssembly(
                aName, 
                AssemblyBuilderAccess.Run);
        ModuleBuilder mb = ab.DefineDynamicModule(aName.Name);
        TypeBuilder tb = mb.DefineType("Test");

        // Add a public static method "M" to Test, and make
 it a
        // generic method with one type parameter named "T").
        //
        MethodBuilder meb = tb.DefineMethod("M", 
            MethodAttributes.Public | MethodAttributes.Static);
        GenericTypeParameterBuilder[] typeParams = 
            meb.DefineGenericParameters(new string[]
 { "T" });

        // Give the method one parameter, of type T, and a 
        // return type of T.
        meb.SetParameters(typeParams);
        meb.SetReturnType(typeParams[0]);

        // Create a MethodInfo for M<string>, which can be used
 in
        // emitted code. This is possible even though the method
        // does not yet have a body, and the enclosing type is not
        // created.
        MethodInfo mi = meb.MakeGenericMethod(typeof(string));
        // Note that this is actually a subclass of MethodInfo, 
        // which has rather limited capabilities -- for
        // example, you cannot reflect on its parameters.
    }
}
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

void main()
{
    // Define a transient dynamic assembly (only to run, not
    // to save) with one module and a type "Test".
    // 
    AssemblyName^ aName = gcnew AssemblyName("MyDynamic");
    AssemblyBuilder^ ab = 
        AppDomain::CurrentDomain->DefineDynamicAssembly(
            aName, 
            AssemblyBuilderAccess::Run);
    ModuleBuilder^ mb = ab->DefineDynamicModule(aName->Name);
    TypeBuilder^ tb = mb->DefineType("Test");

    // Add a public static method "M" to Test, and make it
 a
    // generic method with one type parameter named "T").
    //
    MethodBuilder^ meb = tb->DefineMethod("M", 
        MethodAttributes::Public | MethodAttributes::Static);
    array<GenericTypeParameterBuilder^>^ typeParams = 
        meb->DefineGenericParameters(gcnew array<String^> { "T"
 });

    // Give the method one parameter, of type T, and a 
    // return type of T.
    meb->SetParameters(typeParams);
    meb->SetReturnType(typeParams[0]);

    // Create a MethodInfo for M<string>, which can be used in
    // emitted code. This is possible even though the method
    // does not yet have a body, and the enclosing type is not
    // created.
    MethodInfo^ mi = meb->MakeGenericMethod(String::typeid);
    // Note that this is actually a subclass of MethodInfo, 
    // which has rather limited capabilities -- for
    // example, you cannot reflect on its parameters.
}
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

MethodBuilder.MakeGenericMethod メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



MethodBuilder.MakeGenericMethod メソッドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS