情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

DynamicMethod クラス

2013/12/12

コンパイル、実行、および破棄できる動的メソッドを定義し、表します。破棄されたメソッドは、ガベージ コレクションの対象となります。

System.Object
  System.Reflection.MemberInfo
    System.Reflection.MethodBase
      System.Reflection.MethodInfo
        System.Reflection.Emit.DynamicMethod

Namespace:  System.Reflection.Emit
アセンブリ:  mscorlib (mscorlib.dll 内)

public sealed class DynamicMethod : MethodInfo

DynamicMethod 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッドDynamicMethod(String, Type, Type[])メソッド名、戻り値の型、およびパラメーターの型を指定して、匿名でホストされる動的メソッドを作成します。
パブリック メソッドDynamicMethod(String, Type, Type[], Boolean)メソッド名、戻り値の型、パラメーターの型、モジュールを指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、匿名でホストされる動的メソッドを作成します。
パブリック メソッドDynamicMethod(String, Type, Type[], Module)セキュリティ クリティカル。 メソッド名、戻り値の型、パラメーターの型、およびモジュールを指定して、モジュールに対してグローバルな動的メソッドを作成します。
パブリック メソッドDynamicMethod(String, Type, Type[], Type)セキュリティ クリティカル。 メソッド名、戻り値の型、パラメーターの型、および動的メソッドを論理的に関連付ける型を指定して、動的メソッドを作成します。
パブリック メソッドDynamicMethod(String, Type, Type[], Module, Boolean)セキュリティ クリティカル。 メソッド名、戻り値の型、パラメーターの型、モジュールを指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、モジュールに対してグローバルな動的メソッドを作成します。
パブリック メソッドDynamicMethod(String, Type, Type[], Type, Boolean)セキュリティ クリティカル。 メソッド名、戻り値の型、パラメーターの型、動的メソッドを論理的に関連付ける型を指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、動的メソッドを作成します。
パブリック メソッドDynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean)セキュリティ クリティカル。 メソッド名、属性、呼び出し規約、戻り値の型、パラメーターの型、モジュールを指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、モジュールに対してグローバルな動的メソッドを作成します。
パブリック メソッドDynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean)セキュリティ クリティカル。 メソッド名、属性、呼び出し規約、戻り値の型、パラメーターの型、動的メソッドを論理的に関連付ける型を指定し、さらに動的メソッドの MSIL (Microsoft Intermediate Language) によってアクセスされる型およびメンバーに対して JIT (Just-In-Time) の参照範囲チェックをスキップする必要があるかどうかを指定して、動的メソッドを作成します。
このページのトップへ

  名前説明
パブリック プロパティAttributes動的メソッドの作成時に指定した属性を取得します。 (MethodBase.Attributes をオーバーライドします。)
パブリック プロパティCallingConvention動的メソッドの作成時に指定した呼び出し規約を取得します。 (MethodBase.CallingConvention をオーバーライドします。)
パブリック プロパティContainsGenericParametersジェネリック メソッドに未割り当てのジェネリック型パラメーターが含まれるかどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティCustomAttributesこのメンバーのカスタム属性を格納するコレクションを取得します。 (MemberInfo から継承されます。)
パブリック プロパティDeclaringTypeメソッドを宣言する型を取得します。動的メソッドの場合、常に null です。 (MemberInfo.DeclaringType をオーバーライドします。)
パブリック プロパティInitLocalsメソッドのローカル変数を 0 で初期化するかどうかを示す値を取得または設定します。
パブリック プロパティIsAbstractメソッドが抽象メソッド (Visual Basic の MustInherit) であるかどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティIsAssemblyこのメソッドまたはコンストラクターを参照できる範囲が MethodAttributes.Assembly によって示されるかどうかを表す値を取得します。ここで判定されるのは、このメソッドまたはコンストラクターが同じアセンブリ内の他の型でのみ参照でき、アセンブリ外部の派生型では参照できないものであることです。 (MethodBase から継承されます。)
パブリック プロパティIsConstructorメソッドがコンストラクターであるかどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティIsFamilyこのメソッドまたはコンストラクターへの参照範囲が MethodAttributes.Family によって正しく示されるかどうかを表す値を取得します。ここで判定されるのは、メソッドまたはコンストラクターはそれらのクラスと派生クラスの内側でのみ参照できるものであることです。 (MethodBase から継承されます。)
パブリック プロパティIsFamilyAndAssemblyこのメソッドまたはコンストラクターへの参照範囲が MethodAttributes.FamANDAssem によって示されるかどうかを表す値を取得します。ここで判定されるのは、メソッドまたはコンストラクターは派生クラスから呼び出すことができるが、それらが同じアセンブリ内にある場合に限るものであることです。 (MethodBase から継承されます。)
パブリック プロパティIsFamilyOrAssemblyこのメソッドまたはコンストラクターを参照可能な範囲が MethodAttributes.FamORAssem によって示されるかどうかを表す値を取得します。ここで判定されるのは、メソッドまたはコンストラクターは任意の場所にある派生クラスと、同じアセンブリ内のクラスから呼び出すことができるものであることです。 (MethodBase から継承されます。)
パブリック プロパティIsFinalこのメソッドが final (Visual Basic の場合は NotOverridable) かどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティIsGenericMethodメソッドがジェネリックであるかどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティIsGenericMethodDefinitionメソッドがジェネリック メソッド定義であるかどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティIsHideBySigシグネチャがまったく同じで、同じ種類のメンバーだけが派生クラスで非表示になるかどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティIsPrivateこのメンバーがプライベートであるかどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティIsPublicこれがパブリック メソッドであるかどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティIsSpecialNameこのメソッドが特殊な名前を持つかどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティIsStaticこのメソッドが static (Visual Basic の場合は Shared) かどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティIsVirtualこのメソッドが virtual (Visual Basic の場合は Overridable) かどうかを示す値を取得します。 (MethodBase から継承されます。)
パブリック プロパティMemberTypeこのメンバーがメソッドであることを示す MemberTypes 値を取得します。 (MethodInfo から継承されます。)
パブリック プロパティMetadataTokenメタデータ要素を識別する値を取得します。 (MemberInfo から継承されます。)
パブリック プロパティMethodHandle動的メソッドではサポートされていません。 (MethodBase.MethodHandle をオーバーライドします。)
パブリック プロパティMethodImplementationFlagsメソッド実装の属性を指定する MethodImplAttributes フラグを取得します。 (MethodBase から継承されます。)
パブリック プロパティModule動的メソッドが論理的に関連付けられているモジュールを取得します。 (MemberInfo.Module をオーバーライドします。)
パブリック プロパティName動的メソッドの名前を取得します。 (MemberInfo.Name をオーバーライドします。)
パブリック プロパティReflectedTypeメソッドを取得するためにリフレクションで使用したクラスを取得します。 (MemberInfo.ReflectedType をオーバーライドします。)
パブリック プロパティReturnParameter動的メソッドの戻り値パラメーターを取得します。 (MethodInfo.ReturnParameter をオーバーライドします。)
パブリック プロパティReturnType動的メソッドの戻り値の型を取得します。 (MethodInfo.ReturnType をオーバーライドします。)
パブリック プロパティReturnTypeCustomAttributes動的メソッドの戻り値の型のカスタム属性を取得します。 (MethodInfo.ReturnTypeCustomAttributes をオーバーライドします。)
このページのトップへ

  名前説明
パブリック メソッドCreateDelegate(Type)動的メソッドを完了し、その動的メソッドの実行に使用できる、指定された型のデリゲートを作成します。 (MethodInfo.CreateDelegate(Type) をオーバーライドします。)
パブリック メソッドCreateDelegate(Type, Object)動的メソッドを完了し、デリゲート型とデリゲートのバインド先となるオブジェクトを指定して、メソッドの実行に使用できるデリゲートを作成します。 (MethodInfo.CreateDelegate(Type, Object) をオーバーライドします。)
パブリック メソッドDefineParameter動的メソッドのパラメーターを定義します。
パブリック メソッドEquals対象のインスタンスが、指定したオブジェクトに等しいかどうかを示す値を返します。 (MethodInfo から継承されます。)
プロテクト メソッドFinalizeObject がガベージ コレクションで再利用される前に、Object がリソースを解放して他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)
パブリック メソッドGetBaseDefinitionメソッドの基本実装を返します。 (MethodInfo.GetBaseDefinition() をオーバーライドします。)
パブリック メソッドGetCustomAttributes(Boolean)メソッドに対して定義されているすべてのカスタム属性を返します。 (MemberInfo.GetCustomAttributes(Boolean) をオーバーライドします。)
パブリック メソッドGetCustomAttributes(Type, Boolean)メソッドに適用されている指定した型のカスタム属性を返します。 (MemberInfo.GetCustomAttributes(Type, Boolean) をオーバーライドします。)
パブリック メソッドGetGenericArgumentsジェネリック メソッドの型引数またはジェネリック メソッド定義の型パラメーターを表す Type オブジェクトの配列を返します。 (MethodInfo から継承されます。)
パブリック メソッドGetGenericMethodDefinition現在のメソッドを構築する元になるジェネリック メソッド定義を表す MethodInfo オブジェクトを返します。 (MethodInfo から継承されます。)
パブリック メソッドGetHashCodeこのインスタンスのハッシュ コードを返します。 (MethodInfo から継承されます。)
パブリック メソッドGetILGenerator()既定の MSIL (Microsoft Intermediate Language) ストリーム サイズである 64 バイトを使用して、このメソッドに対応する MSIL ジェネレーターを返します。
パブリック メソッドGetILGenerator(Int32)指定された MSIL (Microsoft Intermediate Language) ストリーム サイズを使用して、このメソッドに対応する MSIL ジェネレーターを返します。
パブリック メソッドGetMethodImplementationFlagsメソッドの実装フラグを返します。 (MethodBase.GetMethodImplementationFlags() をオーバーライドします。)
パブリック メソッドGetParameters動的メソッドのパラメーターを返します。 (MethodBase.GetParameters() をオーバーライドします。)
パブリック メソッドGetType現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッドInvoke(Object, Object[])指定したパラメーターを使用して、現在のインスタンスによって表されるメソッドまたはコンストラクターを呼び出します。 (MethodBase から継承されます。)
パブリック メソッドInvoke(Object, BindingFlags, Binder, Object[], CultureInfo)指定したカルチャ情報で指定したバインダーの制約に基づいて、指定したパラメーターを使用して動的メソッドを呼び出します。 (MethodBase.Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) をオーバーライドします。)
パブリック メソッドIsDefined指定したカスタム属性の型が定義されているかどうかを示します。 (MemberInfo.IsDefined(Type, Boolean) をオーバーライドします。)
パブリック メソッドMakeGenericMethod現在のジェネリック メソッド定義の型パラメーターを型の配列要素に置き換え、その結果構築されるメソッドを表す MethodInfo オブジェクトを返します。 (MethodInfo から継承されます。)
プロテクト メソッドMemberwiseClone現在の Object の簡易コピーを作成します。 (Object から継承されます。)
パブリック メソッドToString文字列として表されたメソッドのシグネチャを返します。 (Object.ToString() をオーバーライドします。)
このページのトップへ

  名前説明
パブリック拡張メソッドGetCustomAttribute(Type)オーバーロードされます。 指定したメンバーに適用される指定した型のカスタム属性を取得します。 (CustomAttributeExtensions によって定義されています。)
パブリック拡張メソッドGetCustomAttribute(Type, Boolean)オーバーロードされます。 指定したメンバーに適用される指定した型のカスタム属性を取得し、オプションでそのメンバーの先祖を検査します。 (CustomAttributeExtensions によって定義されています。)
パブリック拡張メソッドGetCustomAttribute<T>()オーバーロードされます。 指定したメンバーに適用される指定した型のカスタム属性を取得します。 (CustomAttributeExtensions によって定義されています。)
パブリック拡張メソッドGetCustomAttribute<T>(Boolean)オーバーロードされます。 指定したメンバーに適用される指定した型のカスタム属性を取得し、オプションでそのメンバーの先祖を検査します。 (CustomAttributeExtensions によって定義されています。)
パブリック拡張メソッドGetCustomAttributes()オーバーロードされます。 指定したメンバーに適用されるカスタム属性のコレクションを取得します。 (CustomAttributeExtensions によって定義されています。)
パブリック拡張メソッドGetCustomAttributes(Type)オーバーロードされます。 指定したメンバーに適用する指定した型のカスタム属性のコレクションを取得します。 (CustomAttributeExtensions によって定義されています。)
パブリック拡張メソッドGetCustomAttributes<T>()オーバーロードされます。 指定したメンバーに適用する指定した型のカスタム属性のコレクションを取得します。 (CustomAttributeExtensions によって定義されています。)
パブリック拡張メソッドGetCustomAttributes<T>(Boolean)オーバーロードされます。 指定したメンバーに適用される指定した型のカスタム属性のコレクションを取得し、オプションでそのメンバーの先祖を検査します。 (CustomAttributeExtensions によって定義されています。)
パブリック拡張メソッドGetRuntimeBaseDefinitionメソッドが最初に宣言された直接基本クラスまたは間接基本クラスで指定したメソッドを表すオブジェクトを取得します。 (RuntimeReflectionExtensions によって定義されています。)
パブリック拡張メソッドIsDefined指定した型のカスタム属性が指定したメンバーに適用されているかどうかを示します。 (CustomAttributeExtensions によって定義されています。)
このページのトップへ

DynamicMethod クラスを使用すると、実行時にメソッドを生成し実行できます。メソッドを格納するために、動的アセンブリと動的型を生成する必要はありません。Just-In-Time (JIT) コンパイラによって作成された実行可能コードは、DynamicMethod オブジェクトがクリアされたときにクリアされます。動的メソッドは、少量のコードを生成し実行するための最も効率的な方法です。

Windows Phone アプリケーションでは、すべての動的メソッドが匿名でホストされます。匿名でホストされる動的メソッドはシステムの提供するアセンブリに配置されるため、他のコードから分離されます。パブリックでないデータにはアクセスできません。

動的メソッドとそのパラメーターには、名前を付ける必要はありませんが、名前を指定するとデバッグを行う際に役立ちます。動的メソッドまたはそのパラメーターでは、カスタム属性はサポートされていません。

メモメモ:

動的メソッドは、ローカル変数の名前や行番号のマップなどのシンボル情報をサポートしていません。この制限は、将来のバージョンで削除される可能性があります。

動的メソッドは static メソッド (Visual Basic では Shared メソッド) のように動作しますが、デリゲート バインディングの規則により動的メソッドを特定のオブジェクトにバインド可能であるため、そのデリゲート インスタンスを使用して呼び出した場合には、インスタンス メソッドのように動作します。この例については、CreateDelegate(Type, Object) メソッド オーバーロードで説明しています。デリゲート バインディングの規則の詳細については、Delegate クラスを参照してください。

2 つのパラメーターを使用する動的メソッドを作成する例を次に示します。この例では、書式設定された文字列を返す単純な関数本体を出力します。第 1 パラメーターは、書式設定後の文字列に埋め込まれる文字列です。第 2 パラメーターは整数値です。2 乗した後、書式設定された文字列に埋め込まれます。この例では、デリゲートを作成することによってメソッドを完了し、さまざまなパラメーターを持つデリゲートを呼び出し、最後に Invoke メソッドを使用して動的メソッドを呼び出します。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


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

public class Example
{
   // Declare a delegate type that can be used to execute the completed
   // dynamic method. 
   private delegate string HelloDelegate(string sendee, int square);

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      // Create an array that specifies the types of the parameters
      // of the dynamic method. This dynamic method has a String
      // parameter and an Integer parameter.
      Type[] helloArgs = { typeof(string), typeof(int) };

      // Create a dynamic method with the name "Hello", a return type
      // of String, and two parameters whose types are specified by
      // the array helloArgs. 
      DynamicMethod hello = new DynamicMethod("Hello",
          typeof(string),
          helloArgs);

      // Create an array that specifies the parameter types of the
      // overload of String.Format to be used in Hello.
      Type[] formatStringArgs = { typeof(string), typeof(object), typeof(object), 
                                 typeof(object) };
      // Get the overload of String.Format that has one String 
      // parameter for the format, and three object parameters.
      MethodInfo formatString = typeof(String).GetMethod("Format",
          formatStringArgs);

      // Get an ILGenerator and emit a body for the dynamic method,
      // using a stream size larger than the IL that will be
      // emitted.
      ILGenerator il = hello.GetILGenerator(256);
      // Push the format string for String.Format on the stack.
      il.Emit(OpCodes.Ldstr, "Hello, {0}, {1} squared is {2}!");
      // Load the first argument, which is a string, onto the stack,
      // as the second argument of String.Format.
      il.Emit(OpCodes.Ldarg_0);
      // Load the second argument, and box it. This is the third argument
      // of String.Format, and because it is a value type it must be boxed
      // in order to pass it as an object.
      il.Emit(OpCodes.Ldarg_1);
      il.Emit(OpCodes.Box, typeof(int));
      // Load the second argument twice more, as the arguments of the 
      // multiply operation that will square it. 
      il.Emit(OpCodes.Ldarg_1);
      il.Emit(OpCodes.Ldarg_1);
      // Multiply the last two arguments on the stack, leaving the 
      // result on the stack. The result must be boxed, so it can be passed
      // as the fourth argument of String.Format.
      il.Emit(OpCodes.Mul);
      il.Emit(OpCodes.Box, typeof(int));
      // Call the overload of String.Format that prints a string, formatting
      // it to include the next three objects on the stack.
      il.Emit(OpCodes.Call, formatString);
      // The Hello method returns the formatted string, which is already
      // on the stack after the call to String.Format.
      il.Emit(OpCodes.Ret);

      // Add parameter information to the dynamic method. (This is not
      // necessary, but can be useful for debugging.) For each parameter,
      // identified by position, supply the parameter attributes and a 
      // parameter name.
      hello.DefineParameter(1, ParameterAttributes.In, "message");
      hello.DefineParameter(2, ParameterAttributes.In, "valueToReturn");

      // Create a delegate that represents the dynamic method. This
      // action completes the method. Any further attempts to
      // change the method are ignored.
      HelloDelegate hi =
          (HelloDelegate)hello.CreateDelegate(typeof(HelloDelegate));

      // Use the delegate to execute the dynamic method.
      outputBlock.Text += "\r\nUse the delegate to execute the dynamic method:" + "\n";
      outputBlock.Text += "hi(\"Dad\", 42) returned: '" 
                       + hi("Dad", 42) + "'\n";
      // Execute it again, with different arguments.
      outputBlock.Text += "hi(\"Mom\", 5280) returned:  '" 
                       + hi("Mom", 5280) + "'\n";

      outputBlock.Text += "\r\nUse the Invoke method to execute the dynamic method:" + "\n";
      // Create an array of arguments to use with the Invoke method.
      object[] invokeArgs = { "Mom", 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 value-type arguments
      // must be boxed.
      object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
      outputBlock.Text += "hello.Invoke(...) returned:  '" + objRet + "'\n";

      outputBlock.Text += "\r\n ----- Display information about the dynamic method -----" + "\n";
      // Display MethodAttributes for the dynamic method, set when 
      // the dynamic method was created.
      outputBlock.Text += String.Format("Method Attributes: {0}", hello.Attributes) + "\n";

      // Display the calling convention of the dynamic method, set when the 
      // dynamic method was created.
      outputBlock.Text += String.Format("Calling convention: {0}", hello.CallingConvention) + "\n";

      // Display the declaring type, which is always null for dynamic
      // methods.
      if (hello.DeclaringType == null)
      {
         outputBlock.Text += "DeclaringType is always null for dynamic methods." + "\n";
      }
      else
      {
         outputBlock.Text += String.Format("DeclaringType: {0}", hello.DeclaringType) + "\n";
      }

      // Display the default value for InitLocals.
      if (hello.InitLocals)
      {
         outputBlock.Text += "This method contains verifiable code.";
      }
      else
      {
         outputBlock.Text += "This method contains unverifiable code.";
      }
      outputBlock.Text += String.Format(" (InitLocals = {0})", hello.InitLocals) + "\n";

      // Display the module specified when the dynamic method was created.
      outputBlock.Text += String.Format("Module: {0}", hello.Module) + "\n";

      // Display the name specified when the dynamic method was created.
      // Note that the name can be blank.
      outputBlock.Text += String.Format("Name: {0}", hello.Name) + "\n";

      // For dynamic methods, the reflected type is always null.
      if (hello.ReflectedType == null)
      {
         outputBlock.Text += "ReflectedType is null." + "\n";
      }
      else
      {
         outputBlock.Text += String.Format("ReflectedType: {0}", hello.ReflectedType) + "\n";
      }

      if (hello.ReturnParameter == null)
      {
         outputBlock.Text += "Method has no return parameter." + "\n";
      }
      else
      {
         outputBlock.Text += String.Format("Return parameter: {0}", hello.ReturnParameter) + "\n";
      }

      // If the method has no return type, ReturnType is System.Void.
      outputBlock.Text += String.Format("Return type: {0}", hello.ReturnType) + "\n";

      // ReturnTypeCustomAttributes returns an ICustomeAttributeProvider
      // that can be used to enumerate the custom attributes of the
      // return value. At present, there is no way to set such custom
      // attributes, so the list is empty.
      if (hello.ReturnType == typeof(void))
      {
         outputBlock.Text += "The method has no return type." + "\n";
      }
      else
      {
         ICustomAttributeProvider caProvider = hello.ReturnTypeCustomAttributes;
         object[] returnAttributes = caProvider.GetCustomAttributes(true);
         if (returnAttributes.Length == 0)
         {
            outputBlock.Text += "The return type has no custom attributes." + "\n";
         }
         else
         {
            outputBlock.Text += "The return type has the following custom attributes:" + "\n";
            foreach (object attr in returnAttributes)
            {
               outputBlock.Text += "     " + attr.ToString() + "\n";
            }
         }
      }

      outputBlock.Text += String.Format("ToString: {0}", hello.ToString()) + "\n";

      // Display parameter information.
      ParameterInfo[] parameters = hello.GetParameters();
      outputBlock.Text += String.Format("Parameters: name, type, ParameterAttributes") + "\n";
      foreach (ParameterInfo p in parameters)
      {
         outputBlock.Text += String.Format("     {0}, {1}, {2}",
             p.Name, p.ParameterType, p.Attributes) + "\n";
      }
   }
}

/* This code example produces the following output:

Use the delegate to execute the dynamic method:
hi("Dad", 42) returned:  'Hello, Dad, 42 squared is 1764!'
hi("Mom", 5280) returned:  'Hello, Mom, 5280 squared is 27878400!'

Use the Invoke method to execute the dynamic method:
hello.Invoke returned:  'Hello, Mom, 42 squared is 1764!'

 ----- Display information about the dynamic method -----
Method Attributes: PrivateScope, Public, Static
Calling convention: Standard
DeclaringType is always null for dynamic methods.
This method contains verifiable code. (InitLocals = True)
Module: RefEmit_InMemoryManifestModule
Name: Hello
ReflectedType is null.
Method has no return parameter.
Return type: System.Int32
The return type has no custom attributes.
ToString: Int32 Hello(System.String, Int32)
Parameters: name, type, ParameterAttributes
        sendee, System.String, In
        valueToSquare, System.Int32, In
 */


Windows Phone OS

サポート: 8.0, 7.1

この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

表示: