DynamicMethod コンストラクター

定義

動的メソッドを作成します。Creates a dynamic method.

オーバーロード

DynamicMethod(String, Type, Type[])

メソッド名、戻り値の型、およびパラメーターの型を指定して、匿名でホストされる動的メソッドを初期化します。Initializes an anonymously hosted dynamic method, specifying the method name, return type, and parameter types.

DynamicMethod(String, Type, Type[], Boolean)

メソッド名、戻り値の型、パラメーターの型を指定し、さらに Just-In-Time (JIT) 参照範囲チェックが動的メソッドの Microsoft Intermediate Language (MSIL) によりアクセスされる型やメンバーをスキップするかどうかを指定して、匿名ホスト対象の動的メソッドを初期化します。Initializes an anonymously hosted dynamic method, specifying the method name, return type, parameter types, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, Type, Type[], Module)

メソッド名、戻り値の型、パラメーターの型、およびモジュールを指定して、モジュールに対してグローバルな動的メソッドを作成します。Creates a dynamic method that is global to a module, specifying the method name, return type, parameter types, and module.

DynamicMethod(String, Type, Type[], Type)

メソッド名、戻り値の型、パラメーターの型、および動的メソッドを論理的に関連付ける型を指定して、動的メソッドを作成します。Creates a dynamic method, specifying the method name, return type, parameter types, and the type with which the dynamic method is logically associated.

DynamicMethod(String, Type, Type[], Module, Boolean)

メソッド名、戻り値の型、パラメーターの型、モジュールを指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、モジュールに対してグローバルな動的メソッドを作成します。Creates a dynamic method that is global to a module, specifying the method name, return type, parameter types, module, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, Type, Type[], Type, Boolean)

メソッド名、戻り値の型、パラメーターの型、動的メソッドを論理的に関連付ける型を指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、動的メソッドを作成します。Creates a dynamic method, specifying the method name, return type, parameter types, the type with which the dynamic method is logically associated, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean)

メソッド名、属性、呼び出し規約、戻り値の型、パラメーターの型、モジュールを指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、モジュールに対してグローバルな動的メソッドを作成します。Creates a dynamic method that is global to a module, specifying the method name, attributes, calling convention, return type, parameter types, module, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean)

メソッド名、属性、呼び出し規約、戻り値の型、パラメーターの型、動的メソッドを論理的に関連付ける型を指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、動的メソッドを作成します。Creates a dynamic method, specifying the method name, attributes, calling convention, return type, parameter types, the type with which the dynamic method is logically associated, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, Type, Type[])

メソッド名、戻り値の型、およびパラメーターの型を指定して、匿名でホストされる動的メソッドを初期化します。Initializes an anonymously hosted dynamic method, specifying the method name, return type, and parameter types.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type())

パラメーター

name
String

動的メソッドの名前。The name of the dynamic method. これは、長さ 0 の文字列にできますが、 nullにすることはできません。This can be a zero-length string, but it cannot be null.

returnType
Type

動的メソッドの戻り値の型を指定する Type オブジェクト。メソッドに戻り値の型がない場合は nullA Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

動的メソッドのパラメーターの型を指定する Type オブジェクトの配列。メソッドにパラメーターがない場合は nullAn array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

例外

parameterTypes の要素が null または Void です。An element of parameterTypes is null or Void.

namenullです。name is null.

returnType は、IsByReftrue を返す型です。returnType is a type for which IsByRef returns true.

注釈

このコンストラクターによって作成される動的メソッドは、既存の型またはモジュールではなく、匿名アセンブリに関連付けられます。The dynamic method that is created by this constructor is associated with an anonymous assembly instead of an existing type or module. 匿名アセンブリは、動的メソッドのサンドボックス環境を提供するためだけに存在します。つまり、他のコードから分離します。The anonymous assembly exists only to provide a sandbox environment for dynamic methods, that is, to isolate them from other code. この環境では、部分信頼コードによって動的メソッドの生成と実行を安全に行うことができます。This environment makes it safe for the dynamic method to be emitted and executed by partially trusted code.

このコンストラクターは、動的メソッドの MSIL (Microsoft 中間言語) に対して just-in-time (JIT) 参照範囲チェックが適用されることを指定します。This constructor specifies that just-in-time (JIT) visibility checks will be enforced for the Microsoft intermediate language (MSIL) of the dynamic method. つまり、動的メソッドのコードは、パブリッククラスのパブリックメソッドにアクセスできます。That is, the code in the dynamic method has access to public methods of public classes. メソッドがprivateprotected、または (Friend Visual Basic) である型またはinternalメンバーにアクセスしようとすると、例外がスローされます。Exceptions are thrown if the method tries to access types or members that are private, protected, or internal (Friend in Visual Basic). JIT 参照範囲チェックをスキップする機能が制限されている動的メソッドをDynamicMethod(String, Type, Type[], Boolean)作成するには、コンストラクターを使用します。To create a dynamic method that has restricted ability to skip JIT visibility checks, use the DynamicMethod(String, Type, Type[], Boolean) constructor.

匿名でホストされる動的メソッドを構築する場合は、出力アセンブリの呼び出し履歴が含まれます。When an anonymously hosted dynamic method is constructed, the call stack of the emitting assembly is included. メソッドが呼び出されると、実際の呼び出し元のアクセス許可ではなく、出力アセンブリのアクセス許可が使用されます。When the method is invoked, the permissions of the emitting assembly are used instead of the permissions of the actual caller. したがって、動的メソッドは、より高い信頼レベルを持つアセンブリに渡されて実行される場合でも、それを生成したアセンブリより高いレベルの特権では実行できません。Thus, the dynamic method cannot execute at a higher level of privilege than that of the assembly that emitted it, even if it is passed to and executed by an assembly that has a higher trust level.

このコンストラクターは、メソッド属性MethodAttributes.Public MethodAttributes.Static、、および呼び出し規約CallingConventions.Standardを指定します。This constructor specifies the method attributes MethodAttributes.Public and MethodAttributes.Static, and the calling convention CallingConventions.Standard.

注意

このコンストラクターは、 .NET Framework 3.5.NET Framework 3.5以降で導入されました。This constructor was introduced in the .NET Framework 3.5.NET Framework 3.5 or later.

こちらもご覧ください

DynamicMethod(String, Type, Type[], Boolean)

メソッド名、戻り値の型、パラメーターの型を指定し、さらに Just-In-Time (JIT) 参照範囲チェックが動的メソッドの Microsoft Intermediate Language (MSIL) によりアクセスされる型やメンバーをスキップするかどうかを指定して、匿名ホスト対象の動的メソッドを初期化します。Initializes an anonymously hosted dynamic method, specifying the method name, return type, parameter types, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, bool restrictedSkipVisibility);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes, bool restrictedSkipVisibility);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), restrictedSkipVisibility As Boolean)

パラメーター

name
String

動的メソッドの名前。The name of the dynamic method. これは、長さ 0 の文字列にできますが、 nullにすることはできません。This can be a zero-length string, but it cannot be null.

returnType
Type

動的メソッドの戻り値の型を指定する Type オブジェクト。メソッドに戻り値の型がない場合は nullA Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

動的メソッドのパラメーターの型を指定する Type オブジェクトの配列。メソッドにパラメーターがない場合は nullAn array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

restrictedSkipVisibility
Boolean

動的メソッドの MSIL によりアクセスされる型およびメンバーに対する JIT 参照範囲チェックをスキップする場合は true (ただし、それらの型およびメンバーが含まれるアセンブリの信頼レベルは、動的メソッドを出力する呼び出しスタックの信頼レベル以下でなければならないという制限あり)。それ以外の場合は falsetrue to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method, with this restriction: the trust level of the assemblies that contain those types and members must be equal to or less than the trust level of the call stack that emits the dynamic method; otherwise, false.

例外

parameterTypes の要素が null または Void です。An element of parameterTypes is null or Void.

namenullです。name is null.

returnType は、IsByReftrue を返す型です。returnType is a type for which IsByRef returns true.

注釈

このコンストラクターによって作成される動的メソッドは、既存の型またはモジュールではなく、匿名アセンブリに関連付けられます。The dynamic method that is created by this constructor is associated with an anonymous assembly instead of an existing type or module. 匿名アセンブリは、動的メソッドのサンドボックス環境を提供するためだけに存在します。つまり、他のコードから分離します。The anonymous assembly exists only to provide a sandbox environment for dynamic methods, that is, to isolate them from other code. この環境では、部分信頼コードによって動的メソッドの生成と実行を安全に行うことができます。This environment makes it safe for the dynamic method to be emitted and executed by partially trusted code.

匿名privateでホストされる動的メソッドには、、 protected、または (Friend Visual Basic) であるinternal型またはメンバーへの自動アクセスはありません。Anonymously hosted dynamic methods do not have automatic access to any types or members that are private, protected, or internal (Friend in Visual Basic). これは、既存の型またはモジュールに関連付けられている動的メソッドとは異なります。これは、関連付けられているスコープ内の隠しメンバーにアクセスできます。This is different from dynamic methods that are associated with an existing type or module, which have access to hidden members in their associated scope.

動的trueメソッドrestrictedSkipVisibility privateが、 、またinternalはの型またはメンバーにアクセスする必要がある場合は、にを指定します。 protectedSpecify true for restrictedSkipVisibility if your dynamic method has to access types or members that are private, protected, or internal. これにより、動的メソッドでは、これらのメンバーへのアクセスが制限されます。This gives the dynamic method restricted access to these members. つまり、次の条件が満たされている場合にのみ、メンバーにアクセスできます。That is, the members can be accessed only if the following conditions are met:

  • ターゲットメンバーは、動的メソッドを出力する呼び出し履歴と同じかそれより下位の信頼レベルを持つアセンブリに属しています。The target members belong to an assembly that has a level of trust equal to or lower than the call stack that emits the dynamic method.

  • 動的メソッドを出力するコールスタックは、 ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccessフラグを使用して付与されます。The call stack that emits the dynamic method is granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag. 完全信頼でコードを実行する場合は、常に true になります。This is always true when the code is executed with full trust. 部分的に信頼されているコードの場合は、ホストが明示的にアクセス許可を付与している場合にのみ true になります。For partially trusted code, it is true only if the host explicitly grants the permission.

    重要

    アクセス許可が付与されていない場合、 CreateDelegateが呼び出されたとき、または動的メソッドが呼び出されたときにセキュリティ例外がスローされます。このコンストラクターが呼び出されたときにはスローされません。If the permission has not been granted, a security exception is thrown when CreateDelegate is called or when the dynamic method is invoked, not when this constructor is called. 動的メソッドを出力するために特別なアクセス許可は必要ありません。No special permissions are required to emit the dynamic method.

たとえば、をにrestrictedSkipVisibility true設定して作成された動的メソッドは、呼び出し履歴に制限されたメンバーアクセスが許可されている場合、呼び出し履歴上の任意のアセンブリのプライベートメンバーにアクセスできます。For example, a dynamic method that is created with restrictedSkipVisibility set to true can access a private member of any assembly on the call stack if the call stack has been granted restricted member access. 動的メソッドが呼び出し履歴に部分的に信頼されたコードで作成される場合、 .NET Framework.NET Frameworkアセンブリ内の型のプライベートメンバーにアクセスすることはできません。このようなアセンブリは完全に信頼されているためです。If the dynamic method is created with partially trusted code on the call stack, it cannot access a private member of a type in a .NET Framework.NET Framework assembly, because such assemblies are fully trusted.

restrictedSkipVisibilityfalse場合は、JIT 参照範囲チェックが適用されます。If restrictedSkipVisibility is false, JIT visibility checks are enforced. 動的メソッドのコードはパブリッククラスのパブリックメソッドにアクセスでき、例外はprivateprotected、、またinternalはの型またはメンバーにアクセスしようとした場合にスローされます。The code in the dynamic method has access to public methods of public classes, and exceptions are thrown if it tries to access types or members that are private, protected, or internal.

匿名でホストされる動的メソッドを構築する場合は、出力アセンブリの呼び出し履歴が含まれます。When an anonymously hosted dynamic method is constructed, the call stack of the emitting assembly is included. メソッドが呼び出されると、実際の呼び出し元のアクセス許可ではなく、出力コールスタックのアクセス許可が使用されます。When the method is invoked, the permissions of the emitting call stack are used instead of the permissions of the actual caller. したがって、動的メソッドは、より高い信頼レベルを持つアセンブリに渡されて実行される場合でも、それを生成したアセンブリより高いレベルの特権では実行できません。Thus, the dynamic method cannot execute at a higher level of privilege than that of the assembly that emitted it, even if it is passed to and executed by an assembly that has a higher trust level.

このコンストラクターは、メソッド属性MethodAttributes.Public MethodAttributes.Static、、および呼び出し規約CallingConventions.Standardを指定します。This constructor specifies the method attributes MethodAttributes.Public and MethodAttributes.Static, and the calling convention CallingConventions.Standard.

注意

このコンストラクターは、 .NET Framework 3.5.NET Framework 3.5以降で導入されました。This constructor was introduced in the .NET Framework 3.5.NET Framework 3.5 or later.

こちらもご覧ください

DynamicMethod(String, Type, Type[], Module)

メソッド名、戻り値の型、パラメーターの型、およびモジュールを指定して、モジュールに対してグローバルな動的メソッドを作成します。Creates a dynamic method that is global to a module, specifying the method name, return type, parameter types, and module.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes, System.Reflection.Module m);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * System.Reflection.Module -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), m As Module)

パラメーター

name
String

動的メソッドの名前。The name of the dynamic method. これは、長さ 0 の文字列にできますが、 nullにすることはできません。This can be a zero-length string, but it cannot be null.

returnType
Type

動的メソッドの戻り値の型を指定する Type オブジェクト。メソッドに戻り値の型がない場合は nullA Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

動的メソッドのパラメーターの型を指定する Type オブジェクトの配列。メソッドにパラメーターがない場合は nullAn array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

m
Module

動的メソッドを論理的に関連付けるモジュールを表す ModuleA Module representing the module with which the dynamic method is to be logically associated.

例外

parameterTypes の要素が null または Void です。An element of parameterTypes is null or Void.

または-or- m が、動的メソッドを匿名でホストするモジュールです。m is a module that provides anonymous hosting for dynamic methods.

namenullです。name is null.

- または --or- mnullです。m is null.

returnType は、IsByReftrue を返す型です。returnType is a type for which IsByRef returns true.

次のコード例では、2つのパラメーターを受け取る動的メソッドを作成します。The following code example creates a dynamic method that takes two parameters. この例では、最初のパラメーターをコンソールに出力する単純な関数本体を出力します。この例では、メソッドの戻り値として2番目のパラメーターを使用します。The example emits a simple function body that prints the first parameter to the console, and the example uses the second parameter as the return value of the method. この例では、デリゲートを作成してメソッドを完了し、異なるパラメーターを使用してデリゲートを呼び出し、 Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)最後にメソッドを使用して動的メソッドを呼び出します。The example completes the method by creating a delegate, invokes the delegate with different parameters, and finally invokes the dynamic method using the Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) method.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

public ref class Test
{   
};

// Declare a delegate that will be used to execute the completed
// dynamic method.
delegate int HelloInvoker(String^ msg, int ret);

int main()
{
    // Create an array that specifies the types of the parameters
    // of the dynamic method. This method has a string parameter
    // and an int parameter.
    array<Type^>^ helloArgs = {String::typeid, int::typeid};

    // Create a dynamic method with the name "Hello", a return type
    // of int, and two parameters whose types are specified by the
    // array helloArgs. Create the method in the module that
    // defines the Test class.
    DynamicMethod^ hello = gcnew DynamicMethod("Hello", 
        int::typeid,
        helloArgs,
        Test::typeid->Module);

    // Create an array that specifies the parameter types of the
    // overload of Console.WriteLine to be used in Hello.
    array<Type^>^ writeStringArgs = {String::typeid};
    // Get the overload of Console.WriteLine that has one
    // String parameter.
    MethodInfo^ writeString =
        Console::typeid->GetMethod("WriteLine", writeStringArgs);

    // Get an ILGenerator and emit a body for the dynamic method.
    ILGenerator^ ilgen = hello->GetILGenerator();
    // Load the first argument, which is a string, onto the stack.
    ilgen->Emit(OpCodes::Ldarg_0);
    // Call the overload of Console.WriteLine that prints a string.
    ilgen->EmitCall(OpCodes::Call, writeString, nullptr);
    // The Hello method returns the value of the second argument;
    // to do this, load the onto the stack and return.
    ilgen->Emit(OpCodes::Ldarg_1);
    ilgen->Emit(OpCodes::Ret);

    // Create a delegate that represents the dynamic method. This
    // action completes the method, and any further attempts to
    // change the method will cause an exception.
    HelloInvoker^ helloDelegate =
        (HelloInvoker^) hello->CreateDelegate(HelloInvoker::typeid);

    // Use the delegate to execute the dynamic method. Save and
    // print the return value.
    int returnValue = helloDelegate("\r\nHello, World!", 42);
    Console::WriteLine("helloDelegate(\"Hello, World!\", 42) returned {0}",
        returnValue);

    // Do it again, with different arguments.
    returnValue = helloDelegate("\r\nHi, Mom!", 5280);
    Console::WriteLine("helloDelegate(\"Hi, Mom!\", 5280) returned {0}",
        returnValue);

    // Create an array of arguments to use with the Invoke method.
    array<Object^>^ delegateArgs = {"\r\nHello, World!", 42};
    // Invoke the dynamic method using the arguments. This is much
    // slower than using the delegate, because you must create an
    // array to contain the arguments, and ValueType arguments
    // must be boxed.
    Object^ returnValueObject = hello->Invoke(nullptr, delegateArgs);
    Console::WriteLine("hello.Invoke returned {0}", returnValueObject);
}
using System;
using System.Reflection;
using System.Reflection.Emit;
using Microsoft.VisualBasic;

public class Test
{
    // Declare a delegate that will be used to execute the completed
    // dynamic method. 
    private delegate int HelloInvoker(string msg, int ret);

    public static void Main()
    {
        // Create an array that specifies the types of the parameters
        // of the dynamic method. This method has a string parameter
        // and an int parameter.
        Type[] helloArgs = {typeof(string), typeof(int)};

        // Create a dynamic method with the name "Hello", a return type
        // of int, and two parameters whose types are specified by the
        // array helloArgs. Create the method in the module that
        // defines the Test class.
        DynamicMethod hello = new DynamicMethod("Hello", 
            typeof(int), 
            helloArgs, 
            typeof(Test).Module);

        // Create an array that specifies the parameter types of the
        // overload of Console.WriteLine to be used in Hello.
        Type[] writeStringArgs = {typeof(string)};
        // Get the overload of Console.WriteLine that has one
        // String parameter.
        MethodInfo writeString = 
            typeof(Console).GetMethod("WriteLine", writeStringArgs);

        // Get an ILGenerator and emit a body for the dynamic method.
        ILGenerator il = hello.GetILGenerator();
        // Load the first argument, which is a string, onto the stack.
        il.Emit(OpCodes.Ldarg_0);
        // Call the overload of Console.WriteLine that prints a string.
        il.EmitCall(OpCodes.Call, writeString, null);
        // The Hello method returns the value of the second argument;
        // to do this, load the onto the stack and return.
        il.Emit(OpCodes.Ldarg_1);
        il.Emit(OpCodes.Ret);

        // Create a delegate that represents the dynamic method. This
        // action completes the method, and any further attempts to
        // change the method will cause an exception.
        HelloInvoker hi = 
            (HelloInvoker) hello.CreateDelegate(typeof(HelloInvoker));

        // Use the delegate to execute the dynamic method. Save and
        // print the return value.
        int retval = hi("\r\nHello, World!", 42);
        Console.WriteLine("Executing delegate hi(\"Hello, World!\", 42) returned {0}",
            retval);

        // Do it again, with different arguments.
        retval = hi("\r\nHi, Mom!", 5280);
        Console.WriteLine("Executing delegate hi(\"Hi, Mom!\", 5280) returned {0}",
            retval);
        
        // Create an array of arguments to use with the Invoke method.
        object[] invokeArgs = {"\r\nHello, World!", 42};
        // Invoke the dynamic method using the arguments. This is much
        // slower than using the delegate, because you must create an
        // array to contain the arguments, and ValueType arguments
        // must be boxed.
        object objRet = hello.Invoke(null, invokeArgs);
        Console.WriteLine("hello.Invoke returned {0}", objRet);
    }
}
Imports System.Reflection
Imports System.Reflection.Emit

Public Class Test
    ' Declare a delegate that will be used to execute the completed
    ' dynamic method. 
    Private Delegate Function HelloInvoker(ByVal msg As String, _
        ByVal ret As Integer) As Integer

    Public Shared Sub Main()
        ' Create an array that specifies the types of the parameters
        ' of the dynamic method. This method has a String parameter
        ' and an Integer parameter.
        Dim helloArgs() As Type = {GetType(String), GetType(Integer)}

        ' Create a dynamic method with the name "Hello", a return type
        ' of Integer, and two parameters whose types are specified by
        ' the array helloArgs. Create the method in the module that
        ' defines the Test class.
        Dim hello As New DynamicMethod("Hello", _
            GetType(Integer), _
            helloArgs, _
            GetType(Test).Module)

        ' Create an array that specifies the parameter types of the
        ' overload of Console.WriteLine to be used in Hello.
        Dim writeStringArgs() As Type = {GetType(String)}
        ' Get the overload of Console.WriteLine that has one
        ' String parameter.
        Dim writeString As MethodInfo = GetType(Console). _
            GetMethod("WriteLine", writeStringArgs) 

        ' Get an ILGenerator and emit a body for the dynamic method.
        Dim il As ILGenerator = hello.GetILGenerator()
        ' Load the first argument, which is a string, onto the stack.
        il.Emit(OpCodes.Ldarg_0)
        ' Call the overload of Console.WriteLine that prints a string.
        il.EmitCall(OpCodes.Call, writeString, Nothing)
        ' The Hello method returns the value of the second argument;
        ' to do this, load the onto the stack and return.
        il.Emit(OpCodes.Ldarg_1)
        il.Emit(OpCodes.Ret)

        ' Create a delegate that represents the dynamic method. This
        ' action completes the method, and any further attempts to
        ' change the method will cause an exception.
    Dim hi As HelloInvoker = _
            hello.CreateDelegate(GetType(HelloInvoker))

        ' Use the delegate to execute the dynamic method. Save and
        ' print the return value.
        Dim retval As Integer = hi(vbCrLf & "Hello, World!", 42)
        Console.WriteLine("Executing delegate hi(""Hello, World!"", 42) returned " _
            & retval)

        ' Do it again, with different arguments.
        retval = hi(vbCrLf & "Hi, Mom!", 5280)
        Console.WriteLine("Executing delegate hi(""Hi, Mom!"", 5280) returned " _
            & retval)

        ' Create an array of arguments to use with the Invoke method.
        Dim invokeArgs() As Object = {vbCrLf & "Hello, World!", 42}
        ' Invoke the dynamic method using the arguments. This is much
        ' slower than using the delegate, because you must create an
        ' array to contain the arguments, and ValueType arguments
        ' must be boxed. Note that this overload of Invoke is 
        ' inherited from MethodBase, and simply calls the more 
        ' complete overload of Invoke.
        Dim objRet As Object = hello.Invoke(Nothing, invokeArgs)
        Console.WriteLine("hello.Invoke returned " & objRet)
    End Sub
End Class

' This code example produces the following output:
'
'Hello, World!
'Executing delegate hi("Hello, World!", 42) returned 42
'
'Hi, Mom!
'Executing delegate hi("Hi, Mom!", 5280) returned 5280
'
'Hello, World!
'hello.Invoke returned 42
'

注釈

このコンストラクターは、メソッドMethodAttributes.Public属性MethodAttributes.Staticと呼び出し規約CallingConventions.Standardを指定し、just-in-time (JIT) 参照範囲チェックをスキップしません。This constructor specifies method attributes MethodAttributes.Public and MethodAttributes.Static, calling convention CallingConventions.Standard, and does not skip just-in-time (JIT) visibility checks.

このコンストラクターを使用して作成された動的メソッドinternalFriend 、モジュールmに含まれるすべての型のパブリックおよび (Visual Basic) メンバーにアクセスできます。The dynamic method created with this constructor has access to public and internal (Friend in Visual Basic) members of all the types contained in module m.

注意

旧バージョンとの互換性を維持SecurityPermissionするためSecurityPermissionFlag.ControlEvidenceに、このコンストラクターは、次の条件が両方とも当てはまる場合はフラグを要求しますReflectionPermission 。はReflectionPermissionFlag.MemberAccess呼び出し元のモジュール以外のモジュール、はフラグを使用したの要求です。 mが失敗しました。For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: m is a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. SecurityPermission要求が成功した場合、操作は許可されます。If the demand for SecurityPermission succeeds, the operation is allowed.

注意

以降では.NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1、このメンバーはフラグをReflectionPermission使用するReflectionPermissionFlag.ReflectionEmit必要がなくなりました。Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (「リフレクション出力のセキュリティの問題」を参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5.NET Framework 3.5 以降を対象とする必要があります。(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
動的メソッドを、呼び出し元モジュール以外のモジュールに関連付ける場合は。to associate the dynamic method with a module other than the calling module. RestrictedMemberAccess (関連する列挙体)Associated enumeration: RestrictedMemberAccess.

こちらもご覧ください

DynamicMethod(String, Type, Type[], Type)

メソッド名、戻り値の型、パラメーターの型、および動的メソッドを論理的に関連付ける型を指定して、動的メソッドを作成します。Creates a dynamic method, specifying the method name, return type, parameter types, and the type with which the dynamic method is logically associated.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Type owner);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * Type -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), owner As Type)

パラメーター

name
String

動的メソッドの名前。The name of the dynamic method. これは、長さ 0 の文字列にできますが、 nullにすることはできません。This can be a zero-length string, but it cannot be null.

returnType
Type

動的メソッドの戻り値の型を指定する Type オブジェクト。メソッドに戻り値の型がない場合は nullA Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

動的メソッドのパラメーターの型を指定する Type オブジェクトの配列。メソッドにパラメーターがない場合は nullAn array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

owner
Type

動的メソッドを論理的に関連付ける TypeA Type with which the dynamic method is logically associated. 動的メソッドはこの型のすべてのメンバーにアクセスできます。The dynamic method has access to all members of the type.

例外

parameterTypes の要素が null または Void です。An element of parameterTypes is null or Void.

- または --or- owner がインターフェイス、配列、オープン ジェネリック型、ジェネリック型またはジェネリック メソッドの型パラメーターです。owner is an interface, an array, an open generic type, or a type parameter of a generic type or method.

namenullです。name is null.

- または --or- ownernull です。owner is null.

returnTypenull であるか、IsByReftrue が返される型です。returnType is null, or is a type for which IsByRef returns true.

次のコード例ではDynamicMethod 、型に論理的に関連付けられているを作成します。The following code example creates a DynamicMethod that is logically associated with a type. この関連付けにより、その型のプライベートメンバーにアクセスできるようになります。This association gives it access to the private members of that type.

このコード例では、プライベートExampleフィールドを持つという名前のクラスDerivedFromExampleを定義しています。このクラスは、最初のInt32クラスから派生するとExampleいう名前のクラスで、を返し、型UseLikeStatic Int32のパラメーターを持つという名前のデリゲート型を指定します。、およびはを返しUseLikeInstance Int32 、型Int32のパラメーターを1つ持つという名前のデリゲート型。The code example defines a class named Example with a private field, a class named DerivedFromExample that derives from the first class, a delegate type named UseLikeStatic that returns Int32 and has parameters of type Example and Int32, and a delegate type named UseLikeInstance that returns Int32 and has one parameter of type Int32.

このコード例では、 DynamicMethodのインスタンスのプライベートフィールドを変更し、 Example前の値を返すを作成します。The example code then creates a DynamicMethod that changes the private field of an instance of Example and returns the previous value.

注意

一般に、クラスの内部フィールドを変更することは、オブジェクト指向のコーディング手法として適切ではありません。In general, changing the internal fields of classes is not good object-oriented coding practice.

このコード例では、のExampleインスタンスを作成し、2つのデリゲートを作成します。The example code creates an instance of Example and then creates two delegates. 1つ目の型UseLikeStaticはで、動的メソッドと同じパラメーターを持ちます。The first is of type UseLikeStatic, which has the same parameters as the dynamic method. 2番目のはUseLikeInstance型で、最初のパラメーター (型Example) が不足しています。The second is of type UseLikeInstance, which lacks the first parameter (of type Example). このデリゲートは、 CreateDelegate(Type, Object)メソッドオーバーロードを使用して作成されます。このメソッドオーバーロードの2番目のパラメーターは、のExampleインスタンスです。この場合、新しく作成されたデリゲートにバインドされたインスタンスが作成されます。This delegate is created using the CreateDelegate(Type, Object) method overload; the second parameter of that method overload is an instance of Example, in this case the instance just created, which is bound to the newly created delegate. そのデリゲートが呼び出されるたびに、動的メソッドはのExampleバインドされたインスタンスに対して動作します。Whenever that delegate is invoked, the dynamic method acts on the bound instance of Example.

注意

これは、 .NET Framework 2.0.NET Framework 2.0で導入されたデリゲートバインディングの緩やかな規則の例であり、 Delegate.CreateDelegateメソッドの新しいオーバーロードと共に使用されます。This is an example of the relaxed rules for delegate binding introduced in the .NET Framework 2.0.NET Framework 2.0, along with new overloads of the Delegate.CreateDelegate method. 詳細については、Delegate クラスを参照してください。For more information, see the Delegate class.

デリゲートが呼び出され、 UseLikeInstanceデリゲートにバインドされExampleているのインスタンスが渡されます。 UseLikeStaticThe UseLikeStatic delegate is invoked, passing in the instance of Example that is bound to the UseLikeInstance delegate. 次に、 Exampleデリゲートが呼び出され、両方のデリゲートがの同じインスタンスで動作するようUseLikeInstanceになります。Then the UseLikeInstance delegate is invoked, so that both delegates act on the same instance of Example. 内部フィールドの値の変更は、各呼び出しの後に表示されます。The changes in the values of the internal field are displayed after each call. 最後に、 UseLikeInstanceデリゲートがのDerivedFromExampleインスタンスにバインドされ、デリゲート呼び出しが繰り返されます。Finally, a UseLikeInstance delegate is bound to an instance of DerivedFromExample, and the delegate calls are repeated.

using System;
using System.Reflection;
using System.Reflection.Emit;

// These classes are for demonstration purposes.
//
public class Example
{
    private int id = 0;
    public Example(int id)
    {
        this.id = id;
    }
    public int ID { get { return id; }}
}

public class DerivedFromExample : Example
{
    public DerivedFromExample(int id) : base(id) {} 
}

// Two delegates are declared: UseLikeInstance treats the dynamic
// method as if it were an instance method, and UseLikeStatic
// treats the dynamic method in the ordinary fashion.
// 
public delegate int UseLikeInstance(int newID);
public delegate int UseLikeStatic(Example ex, int newID);

public class Demo
{
    public static void Main()
    {
        // This dynamic method changes the private id field. It has
        // no name; it returns the old id value (return type int);
        // it takes two parameters, an instance of Example and 
        // an int that is the new value of id; and it is declared 
        // with Example as the owner type, so it can access all 
        // members, public and private.
        //
        DynamicMethod changeID = new DynamicMethod(
            "",
            typeof(int),
            new Type[] { typeof(Example), typeof(int) },
            typeof(Example)
        );

        // Get a FieldInfo for the private field 'id'.
        FieldInfo fid = typeof(Example).GetField(
            "id",
            BindingFlags.NonPublic | BindingFlags.Instance
        );
    
        ILGenerator ilg = changeID.GetILGenerator();

        // Push the current value of the id field onto the 
        // evaluation stack. It's an instance field, so load the
        // instance of Example before accessing the field.
        ilg.Emit(OpCodes.Ldarg_0);
        ilg.Emit(OpCodes.Ldfld, fid);

        // Load the instance of Example again, load the new value 
        // of id, and store the new field value. 
        ilg.Emit(OpCodes.Ldarg_0);
        ilg.Emit(OpCodes.Ldarg_1);
        ilg.Emit(OpCodes.Stfld, fid);

        // The original value of the id field is now the only 
        // thing on the stack, so return from the call.
        ilg.Emit(OpCodes.Ret);


        // Create a delegate that uses changeID in the ordinary
        // way, as a static method that takes an instance of
        // Example and an int.
        //
        UseLikeStatic uls = 
            (UseLikeStatic) changeID.CreateDelegate(
                typeof(UseLikeStatic)
            );

        // Create an instance of Example with an id of 42.
        //
        Example ex = new Example(42);

        // Create a delegate that is bound to the instance of 
        // of Example. This is possible because the first 
        // parameter of changeID is of type Example. The 
        // delegate has all the parameters of changeID except
        // the first.
        UseLikeInstance uli = 
            (UseLikeInstance) changeID.CreateDelegate(
                typeof(UseLikeInstance),
                ex
            );

        // First, change the value of id by calling changeID as
        // a static method, passing in the instance of Example.
        //
        Console.WriteLine(
            "Change the value of id; previous value: {0}",
            uls(ex, 1492)
        );

        // Change the value of id again using the delegate bound
        // to the instance of Example.
        //
        Console.WriteLine(
            "Change the value of id; previous value: {0}",
            uli(2700)
        );

        Console.WriteLine("Final value of id: {0}", ex.ID);


        // Now repeat the process with a class that derives
        // from Example.
        //
        DerivedFromExample dfex = new DerivedFromExample(71);

        uli = (UseLikeInstance) changeID.CreateDelegate(
                typeof(UseLikeInstance),
                dfex
            );

        Console.WriteLine(
            "Change the value of id; previous value: {0}",
            uls(dfex, 73)
        );
        Console.WriteLine(
            "Change the value of id; previous value: {0}",
            uli(79)
        );
        Console.WriteLine("Final value of id: {0}", dfex.ID);
    }
}

/* This code example produces the following output:

Change the value of id; previous value: 42
Change the value of id; previous value: 1492
Final value of id: 2700
Change the value of id; previous value: 71
Change the value of id; previous value: 73
Final value of id: 79
 */
Imports System.Reflection
Imports System.Reflection.Emit

' These classes are for demonstration purposes.
'
Public Class Example
    Private _id As Integer = 0
    
    Public Sub New(ByVal newId As Integer) 
        _id = newId    
    End Sub
    
    Public ReadOnly Property ID() As Integer 
        Get
            Return _id
        End Get
    End Property 
End Class

Public Class DerivedFromExample
    Inherits Example
    
    Public Sub New(ByVal newId As Integer) 
        MyBase.New(newId)
    End Sub
End Class
 
' Two delegates are declared: UseLikeInstance treats the dynamic
' method as if it were an instance method, and UseLikeStatic
' treats the dynamic method in the ordinary fashion.
' 
Public Delegate Function UseLikeInstance(ByVal newID As Integer) _
    As Integer 
Public Delegate Function UseLikeStatic(ByVal ex As Example, _
    ByVal newID As Integer) As Integer 

Public Class Demo
    
    Public Shared Sub Main() 
        ' This dynamic method changes the private _id field. It 
        ' has no name; it returns the old _id value (return type 
        ' Integer); it takes two parameters, an instance of Example 
        ' and an Integer that is the new value of _id; and it is 
        ' declared with Example as the owner type, so it can 
        ' access all members, public and private.
        '
        Dim changeID As New DynamicMethod( _
            "", _
            GetType(Integer), _
            New Type() {GetType(Example), GetType(Integer)}, _
            GetType(Example) _
        )
        
        ' Get a FieldInfo for the private field '_id'.
        Dim fid As FieldInfo = GetType(Example).GetField( _
            "_id", _
            BindingFlags.NonPublic Or BindingFlags.Instance _
        )
        
        Dim ilg As ILGenerator = changeID.GetILGenerator()
        
        ' Push the current value of the id field onto the 
        ' evaluation stack. It's an instance field, so load the
        ' instance of Example before accessing the field.
        ilg.Emit(OpCodes.Ldarg_0)
        ilg.Emit(OpCodes.Ldfld, fid)
        
        ' Load the instance of Example again, load the new value 
        ' of id, and store the new field value. 
        ilg.Emit(OpCodes.Ldarg_0)
        ilg.Emit(OpCodes.Ldarg_1)
        ilg.Emit(OpCodes.Stfld, fid)
        
        ' The original value of the id field is now the only 
        ' thing on the stack, so return from the call.
        ilg.Emit(OpCodes.Ret)
        
        
        ' Create a delegate that uses changeID in the ordinary
        ' way, as a static method that takes an instance of
        ' Example and an Integer.
        '
        Dim uls As UseLikeStatic = CType( _
            changeID.CreateDelegate(GetType(UseLikeStatic)), _
            UseLikeStatic _
        )
        
        ' Create an instance of Example with an id of 42.
        '
        Dim ex As New Example(42)
        
        ' Create a delegate that is bound to the instance of 
        ' of Example. This is possible because the first 
        ' parameter of changeID is of type Example. The 
        ' delegate has all the parameters of changeID except
        ' the first.
        Dim uli As UseLikeInstance = CType( _
            changeID.CreateDelegate( _
                GetType(UseLikeInstance), _
                ex), _
            UseLikeInstance _
        )
        
        ' First, change the value of _id by calling changeID as
        ' a static method, passing in the instance of Example.
        '
        Console.WriteLine( _
            "Change the value of _id; previous value: {0}", _
            uls(ex, 1492) _
        )
        
        ' Change the value of _id again using the delegate 
        ' bound to the instance of Example.
        '
        Console.WriteLine( _
            "Change the value of _id; previous value: {0}", _
            uli(2700) _
        )
        
        Console.WriteLine("Final value of _id: {0}", ex.ID)
    

        ' Now repeat the process with a class that derives
        ' from Example.
        '
        Dim dfex As New DerivedFromExample(71)

        uli = CType( _
            changeID.CreateDelegate( _
                GetType(UseLikeInstance), _
                dfex), _
            UseLikeInstance _
        )

        Console.WriteLine( _
            "Change the value of _id; previous value: {0}", _
            uls(dfex, 73) _
        )
        Console.WriteLine( _
            "Change the value of _id; previous value: {0}", _
            uli(79) _
        )
        Console.WriteLine("Final value of _id: {0}", dfex.ID)

    End Sub
End Class

' This code example produces the following output:
'
'Change the value of _id; previous value: 42
'Change the value of _id; previous value: 1492
'Final value of _id: 2700
'Change the value of _id; previous value: 71
'Change the value of _id; previous value: 73
'Final value of _id: 79' 

注釈

このコンストラクターを使用して作成された動的メソッドは、型ownerのすべてのメンバー、 internalおよびFriendを含むownerモジュール内の他のすべての型のパブリックおよび (Visual Basic) メンバーにアクセスできます。The dynamic method created with this constructor has access to all members of the type owner, and to public and internal (Friend in Visual Basic) members of all the other types in the module that contains owner.

このコンストラクターは、メソッドMethodAttributes.Public属性MethodAttributes.Staticと呼び出し規約CallingConventions.Standardを指定し、just-in-time (JIT) 参照範囲チェックをスキップしません。This constructor specifies method attributes MethodAttributes.Public and MethodAttributes.Static, calling convention CallingConventions.Standard, and does not skip just-in-time (JIT) visibility checks.

注意

旧バージョンとの互換性を維持SecurityPermissionするためSecurityPermissionFlag.ControlEvidenceに、このコンストラクターは、次の条件ownerが両方とも当てはまる場合はフラグを必要とReflectionPermissionします。はReflectionPermissionFlag.MemberAccess 、呼び出し元のモジュール以外のモジュールにあり、フラグが失敗しました。For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: owner is in a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. SecurityPermission要求が成功した場合、操作は許可されます。If the demand for SecurityPermission succeeds, the operation is allowed.

注意

以降では.NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1、このメンバーはフラグをReflectionPermission使用するReflectionPermissionFlag.ReflectionEmit必要がなくなりました。Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (「リフレクション出力のセキュリティの問題」を参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5.NET Framework 3.5 以降を対象とする必要があります。(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
動的メソッドを、呼び出し元モジュール以外のモジュール内の型に関連付ける場合は。to associate the dynamic method with a type in a module other than the calling module. RestrictedMemberAccess (関連する列挙体)Associated enumeration: RestrictedMemberAccess.

こちらもご覧ください

DynamicMethod(String, Type, Type[], Module, Boolean)

メソッド名、戻り値の型、パラメーターの型、モジュールを指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、モジュールに対してグローバルな動的メソッドを作成します。Creates a dynamic method that is global to a module, specifying the method name, return type, parameter types, module, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m, bool skipVisibility);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes, System.Reflection.Module m, bool skipVisibility);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * System.Reflection.Module * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), m As Module, skipVisibility As Boolean)

パラメーター

name
String

動的メソッドの名前。The name of the dynamic method. これは、長さ 0 の文字列にできますが、 nullにすることはできません。This can be a zero-length string, but it cannot be null.

returnType
Type

動的メソッドの戻り値の型を指定する Type オブジェクト。メソッドに戻り値の型がない場合は nullA Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

動的メソッドのパラメーターの型を指定する Type オブジェクトの配列。メソッドにパラメーターがない場合は nullAn array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

m
Module

動的メソッドを論理的に関連付けるモジュールを表す ModuleA Module representing the module with which the dynamic method is to be logically associated.

skipVisibility
Boolean

動的メソッドの MSIL によってアクセスされる型およびメンバーに対して JIT の参照範囲チェックをスキップする場合は truetrue to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method.

例外

parameterTypes の要素が null または Void です。An element of parameterTypes is null or Void.

または-or- m が、動的メソッドを匿名でホストするモジュールです。m is a module that provides anonymous hosting for dynamic methods.

namenullです。name is null.

- または --or- mnullです。m is null.

returnType は、IsByReftrue を返す型です。returnType is a type for which IsByRef returns true.

注釈

このコンストラクター MethodAttributes.Staticは、メソッドMethodAttributes.Public属性、、および呼び出しCallingConventions.Standard規約を指定します。This constructor specifies method attributes MethodAttributes.Public and MethodAttributes.Static, and calling convention CallingConventions.Standard.

このコンストラクターで作成される動的メソッドは、含まれinternalFriendいるモジュールm内のすべての型のパブリックおよび (Visual Basic) メンバーにアクセスできます。The dynamic method created with this constructor has access to public and internal (Friend in Visual Basic) members of all the types in contained module m. JIT コンパイラの参照範囲チェックをスキップすると、動的メソッドは、他のすべての型のプライベートメンバーとプロテクトメンバーにもアクセスできます。Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types as well. これは、たとえば、オブジェクトをシリアル化するコードを記述する場合に便利です。This is useful, for example, when writing code to serialize objects.

注意

旧バージョンとの互換性を維持SecurityPermissionするためSecurityPermissionFlag.ControlEvidenceに、このコンストラクターは、次の条件が両方とも当てはまる場合はフラグを要求しますReflectionPermission 。はReflectionPermissionFlag.MemberAccess呼び出し元のモジュール以外のモジュール、はフラグを使用したの要求です。 mが失敗しました。For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: m is a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. SecurityPermission要求が成功した場合、操作は許可されます。If the demand for SecurityPermission succeeds, the operation is allowed.

注意

以降では.NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1、このメンバーはフラグをReflectionPermission使用するReflectionPermissionFlag.ReflectionEmit必要がなくなりました。Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (「リフレクション出力のセキュリティの問題」を参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5.NET Framework 3.5 以降を対象とする必要があります。(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
動的メソッドを、呼び出し元モジュール以外のモジュールに関連付ける場合は。to associate the dynamic method with a module other than the calling module. RestrictedMemberAccess (関連する列挙体)Associated enumeration: RestrictedMemberAccess.

こちらもご覧ください

DynamicMethod(String, Type, Type[], Type, Boolean)

メソッド名、戻り値の型、パラメーターの型、動的メソッドを論理的に関連付ける型を指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、動的メソッドを作成します。Creates a dynamic method, specifying the method name, return type, parameter types, the type with which the dynamic method is logically associated, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner, bool skipVisibility);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * Type * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), owner As Type, skipVisibility As Boolean)

パラメーター

name
String

動的メソッドの名前。The name of the dynamic method. これは、長さ 0 の文字列にできますが、 nullにすることはできません。This can be a zero-length string, but it cannot be null.

returnType
Type

動的メソッドの戻り値の型を指定する Type オブジェクト。メソッドに戻り値の型がない場合は nullA Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

動的メソッドのパラメーターの型を指定する Type オブジェクトの配列。メソッドにパラメーターがない場合は nullAn array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

owner
Type

動的メソッドを論理的に関連付ける TypeA Type with which the dynamic method is logically associated. 動的メソッドはこの型のすべてのメンバーにアクセスできます。The dynamic method has access to all members of the type.

skipVisibility
Boolean

動的メソッドの MSIL によってアクセスされる型およびメンバーに対して JIT の参照範囲チェックをスキップする場合は true。それ以外の場合は falsetrue to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method; otherwise, false.

例外

parameterTypes の要素が null または Void です。An element of parameterTypes is null or Void.

または-or- owner がインターフェイス、配列、オープン ジェネリック型、ジェネリック型またはジェネリック メソッドの型パラメーターです。owner is an interface, an array, an open generic type, or a type parameter of a generic type or method.

namenullです。name is null.

- または --or- ownernullです。owner is null.

returnTypenull であるか、IsByReftrue が返される型です。returnType is null, or is a type for which IsByRef returns true.

注釈

このコンストラクターを使用して作成された動的メソッドは、型ownerのすべてのメンバー、 internalおよびFriendを含むownerモジュール内の他のすべての型のパブリックおよび (Visual Basic) メンバーにアクセスできます。The dynamic method created with this constructor has access to all members of the type owner, and to public and internal (Friend in Visual Basic) members of all the other types in the module that contains owner. JIT コンパイラの参照範囲チェックをスキップすると、動的メソッドは、他のすべての型のプライベートメンバーとプロテクトメンバーにもアクセスできます。Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types as well. これは、たとえば、オブジェクトをシリアル化するコードを記述する場合に便利です。This is useful, for example, when writing code to serialize objects.

このコンストラクター MethodAttributes.Staticは、メソッドMethodAttributes.Public属性、、および呼び出しCallingConventions.Standard規約を指定します。This constructor specifies method attributes MethodAttributes.Public and MethodAttributes.Static, and calling convention CallingConventions.Standard.

注意

旧バージョンとの互換性を維持SecurityPermissionするためSecurityPermissionFlag.ControlEvidenceに、このコンストラクターは、次の条件ownerが両方とも当てはまる場合はフラグを必要とReflectionPermissionします。はReflectionPermissionFlag.MemberAccess 、呼び出し元のモジュール以外のモジュールにあり、フラグが失敗しました。For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: owner is in a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. SecurityPermission要求が成功した場合、操作は許可されます。If the demand for SecurityPermission succeeds, the operation is allowed.

注意

以降では.NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1、このメンバーはフラグをReflectionPermission使用するReflectionPermissionFlag.ReflectionEmit必要がなくなりました。Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (「リフレクション出力のセキュリティの問題」を参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5.NET Framework 3.5 以降を対象とする必要があります。(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
動的メソッドを、呼び出し元モジュール以外のモジュール内の型に関連付ける場合は。to associate the dynamic method with a type in a module other than the calling module. RestrictedMemberAccess (関連する列挙体)Associated enumeration: RestrictedMemberAccess.

こちらもご覧ください

DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean)

メソッド名、属性、呼び出し規約、戻り値の型、パラメーターの型、モジュールを指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、モジュールに対してグローバルな動的メソッドを作成します。Creates a dynamic method that is global to a module, specifying the method name, attributes, calling convention, return type, parameter types, module, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

public:
 DynamicMethod(System::String ^ name, System::Reflection::MethodAttributes attributes, System::Reflection::CallingConventions callingConvention, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m, bool skipVisibility);
public DynamicMethod (string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, System.Reflection.Module m, bool skipVisibility);
new System.Reflection.Emit.DynamicMethod : string * System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type * Type[] * System.Reflection.Module * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, attributes As MethodAttributes, callingConvention As CallingConventions, returnType As Type, parameterTypes As Type(), m As Module, skipVisibility As Boolean)

パラメーター

name
String

動的メソッドの名前。The name of the dynamic method. これは、長さ 0 の文字列にすることはできますが、null にすることはできません。This can be a zero-length string, but it cannot be null.

attributes
MethodAttributes

動的メソッドの属性を指定する MethodAttributes 値のビットごとの組み合わせ。A bitwise combination of MethodAttributes values that specifies the attributes of the dynamic method. 許可される組み合わせは、PublicStatic の組み合わせだけです。The only combination allowed is Public and Static.

callingConvention
CallingConventions

動的メソッドの呼び出し規約。The calling convention for the dynamic method. Standardにする必要があります。Must be Standard.

returnType
Type

動的メソッドの戻り値の型を指定する Type オブジェクト。メソッドに戻り値の型がない場合は nullA Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

動的メソッドのパラメーターの型を指定する Type オブジェクトの配列。メソッドにパラメーターがない場合は nullAn array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

m
Module

動的メソッドを論理的に関連付けるモジュールを表す ModuleA Module representing the module with which the dynamic method is to be logically associated.

skipVisibility
Boolean

動的メソッドの MSIL によってアクセスされる型およびメンバーに対して JIT の参照範囲チェックをスキップする場合は true。それ以外の場合は falsetrue to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method; otherwise, false.

例外

parameterTypes の要素が null または Void です。An element of parameterTypes is null or Void.

- または --or- m が、動的メソッドを匿名でホストするモジュールです。m is a module that provides anonymous hosting for dynamic methods.

namenullです。name is null.

- または --or- mnullです。m is null.

attributesPublicStatic 以外のフラグの組み合わせです。attributes is a combination of flags other than Public and Static.

- または --or- callingConventionStandard ではありません。callingConvention is not Standard.

- または --or- returnType は、IsByReftrue を返す型です。returnType is a type for which IsByRef returns true.

注釈

このコンストラクターを使用して作成された動的メソッドinternalFriend 、モジュールmに含まれるすべてのパブリック型と内部型のパブリックおよび (Visual Basic) メンバーにアクセスできます。The dynamic method created with this constructor has access to public and internal (Friend in Visual Basic) members of all the public and internal types contained in module m.

JIT コンパイラの参照範囲チェックを省略すると、動的メソッドは、モジュールおよび他のすべてのアセンブリの他のすべての型のプライベートメンバーとプロテクトメンバーにもアクセスできるようになります。Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types in the module and in all other assemblies as well. これは、たとえば、オブジェクトをシリアル化するコードを記述する場合に便利です。This is useful, for example, when writing code to serialize objects.

注意

旧バージョンとの互換性を維持SecurityPermissionするためSecurityPermissionFlag.ControlEvidenceに、このコンストラクターは、次の条件が両方とも当てはまる場合はフラグを要求しますReflectionPermission 。はReflectionPermissionFlag.MemberAccess呼び出し元のモジュール以外のモジュール、はフラグを使用したの要求です。 mが失敗しました。For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: m is a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. SecurityPermission要求が成功した場合、操作は許可されます。If the demand for SecurityPermission succeeds, the operation is allowed.

注意

以降では.NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1、このメンバーはフラグをReflectionPermission使用するReflectionPermissionFlag.ReflectionEmit必要がなくなりました。Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (「リフレクション出力のセキュリティの問題」を参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5.NET Framework 3.5 以降を対象とする必要があります。(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
動的メソッドを、呼び出し元モジュール以外のモジュールに関連付ける場合は。to associate the dynamic method with a module other than the calling module. RestrictedMemberAccess (関連する列挙体)Associated enumeration: RestrictedMemberAccess.

こちらもご覧ください

DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean)

メソッド名、属性、呼び出し規約、戻り値の型、パラメーターの型、動的メソッドを論理的に関連付ける型を指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、動的メソッドを作成します。Creates a dynamic method, specifying the method name, attributes, calling convention, return type, parameter types, the type with which the dynamic method is logically associated, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

public:
 DynamicMethod(System::String ^ name, System::Reflection::MethodAttributes attributes, System::Reflection::CallingConventions callingConvention, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner, bool skipVisibility);
public DynamicMethod (string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility);
new System.Reflection.Emit.DynamicMethod : string * System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type * Type[] * Type * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, attributes As MethodAttributes, callingConvention As CallingConventions, returnType As Type, parameterTypes As Type(), owner As Type, skipVisibility As Boolean)

パラメーター

name
String

動的メソッドの名前。The name of the dynamic method. これは、長さ 0 の文字列にすることはできますが、null にすることはできません。This can be a zero-length string, but it cannot be null.

attributes
MethodAttributes

動的メソッドの属性を指定する MethodAttributes 値のビットごとの組み合わせ。A bitwise combination of MethodAttributes values that specifies the attributes of the dynamic method. 許可される組み合わせは、PublicStatic の組み合わせだけです。The only combination allowed is Public and Static.

callingConvention
CallingConventions

動的メソッドの呼び出し規約。The calling convention for the dynamic method. Standardにする必要があります。Must be Standard.

returnType
Type

動的メソッドの戻り値の型を指定する Type オブジェクト。メソッドに戻り値の型がない場合は nullA Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

動的メソッドのパラメーターの型を指定する Type オブジェクトの配列。メソッドにパラメーターがない場合は nullAn array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

owner
Type

動的メソッドを論理的に関連付ける TypeA Type with which the dynamic method is logically associated. 動的メソッドはこの型のすべてのメンバーにアクセスできます。The dynamic method has access to all members of the type.

skipVisibility
Boolean

動的メソッドの MSIL によってアクセスされる型およびメンバーに対して JIT の参照範囲チェックをスキップする場合は true。それ以外の場合は falsetrue to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method; otherwise, false.

例外

parameterTypes の要素が null または Void です。An element of parameterTypes is null or Void.

- または --or- owner がインターフェイス、配列、オープン ジェネリック型、ジェネリック型またはジェネリック メソッドの型パラメーターです。owner is an interface, an array, an open generic type, or a type parameter of a generic type or method.

namenullです。name is null.

- または --or- ownernullです。owner is null.

attributesPublicStatic 以外のフラグの組み合わせです。attributes is a combination of flags other than Public and Static.

- または --or- callingConventionStandard ではありません。callingConvention is not Standard.

- または --or- returnType は、IsByReftrue を返す型です。returnType is a type for which IsByRef returns true.

注釈

動的メソッドは、型ownerを含むモジュールに対してグローバルです。The dynamic method is global to the module that contains the type owner. この型ownerのすべてのメンバーにアクセスできます。It has access to all members of the type owner.

このコンストラクターを使用して作成された動的メソッドは、型ownerのすべてのメンバーにinternalアクセスできます。また、を含むownerモジュールに格納されているすべての型のパブリックおよび (Friend Visual Basic) メンバーにアクセスできます。The dynamic method created with this constructor has access to all members of the type owner, and to public and internal (Friend in Visual Basic) members of all the types contained in the module that contains owner. JIT コンパイラの参照範囲チェックをスキップすると、動的メソッドは、他のすべての型のプライベートメンバーとプロテクトメンバーにもアクセスできます。Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types as well. これは、たとえば、オブジェクトをシリアル化するコードを記述する場合に便利です。This is useful, for example, when writing code to serialize objects.

注意

旧バージョンとの互換性を維持SecurityPermissionするためSecurityPermissionFlag.ControlEvidenceに、このコンストラクターは、次の条件ownerが両方とも当てはまる場合はフラグを必要とReflectionPermissionします。はReflectionPermissionFlag.MemberAccess 、呼び出し元のモジュール以外のモジュールにあり、フラグが失敗しました。For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: owner is in a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. SecurityPermission要求が成功した場合、操作は許可されます。If the demand for SecurityPermission succeeds, the operation is allowed.

注意

以降では.NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1、このメンバーはフラグをReflectionPermission使用するReflectionPermissionFlag.ReflectionEmit必要がなくなりました。Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (「リフレクション出力のセキュリティの問題」を参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5.NET Framework 3.5 以降を対象とする必要があります。(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
動的メソッドを、呼び出し元モジュール以外のモジュール内の型に関連付ける場合は。to associate the dynamic method with a type in a module other than the calling module. RestrictedMemberAccess (関連する列挙体)Associated enumeration: RestrictedMemberAccess.

こちらもご覧ください

適用対象