이 항목은 아직 평가되지 않았습니다.- 이 항목 평가

DynamicMethod 클래스

2013-12-13

컴파일, 실행, 삭제 가능한 동적 메서드를 정의하고 나타냅니다. 삭제한 메서드는 가비지 수집 대상이 될 수 있습니다.

Namespace:  System.Reflection.Emit
어셈블리:  mscorlib(mscorlib.dll)
public sealed class DynamicMethod : MethodInfo

DynamicMethod 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드DynamicMethod(String, Type, Type[])메서드 이름, 반환 형식 및 매개 변수 형식을 지정하여 익명으로 호스팅된 동적 메서드를 만듭니다.
Public 메서드DynamicMethod(String, Type, Type[], Boolean)메서드 이름, 반환 형식 및 매개 변수 형식을 지정하고 동적 메서드의 MSIL(Microsoft Intermediate Language)을 통해 액세스하는 형식과 멤버에 대해 JIT(Just-In-Time) 가시성 검사를 생략할지 여부를 지정하여 익명으로 호스팅된 동적 메서드를 만듭니다.
Public 메서드DynamicMethod(String, Type, Type[], Module)보안 중요 메서드 이름, 반환 값, 매개 변수 형식 및 모듈을 지정하여 모듈에 대해 전역 메서드인 동적 메서드를 만듭니다.
Public 메서드DynamicMethod(String, Type, Type[], Type)보안 중요 메서드 이름, 반환 형식, 매개 변수 형식 및 동적 메서드가 논리적으로 연결될 형식을 지정하여 동적 메서드를 만듭니다.
Public 메서드DynamicMethod(String, Type, Type[], Module, Boolean)보안 중요 메서드 이름, 반환 형식, 매개 변수 형식 및 모듈을 지정하고 동적 메서드의 MSIL(Microsoft Intermediate Language)을 통해 액세스하는 형식과 멤버에 대해 JIT(Just-In-Time) 가시성 검사를 생략할지 여부를 지정하여 모듈에 대해 전역인 동적 메서드를 만듭니다.
Public 메서드DynamicMethod(String, Type, Type[], Type, Boolean)보안 중요 메서드 이름, 반환 형식, 매개 변수 형식, 동적 메서드를 논리적으로 연결할 형식을 지정하고 동적 메서드의 MSIL(Microsoft Intermediate Language)을 통해 액세스하는 형식과 멤버에 대해 JIT(Just-In-Time) 가시성 검사를 생략할지 여부를 지정하여 동적 메서드를 만듭니다.
Public 메서드DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean)보안 중요 메서드 이름, 특성, 호출 규칙, 반환 형식, 매개 변수 형식 및 모듈을 지정하고 동적 메서드의 MSIL(Microsoft Intermediate Language)을 통해 액세스하는 형식과 멤버에 대해 JIT(Just-In-Time) 가시성 검사를 생략할지 여부를 지정하여 모듈에 대해 전역인 동적 메서드를 만듭니다.
Public 메서드DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean)보안 중요 메서드 이름, 특성, 호출 규칙, 반환 형식, 매개 변수 형식, 동적 메서드를 논리적으로 연결할 형식을 지정하고 동적 메서드의 MSIL(Microsoft Intermediate Language)을 통해 액세스하는 형식과 멤버에 대해 JIT(Just-In-Time) 가시성 검사를 생략할지 여부를 지정하여 동적 메서드를 만듭니다.
맨 위
  이름설명
Public 속성Attributes동적 메서드를 만들 때 지정된 특성을 가져옵니다. (MethodBase.Attributes을(를) 재정의함)
Public 속성CallingConvention동적 메서드를 만들 때 지정된 호출 규칙을 가져옵니다. (MethodBase.CallingConvention을(를) 재정의함)
Public 속성ContainsGenericParameters제네릭 메서드에 할당되지 않은 제네릭 형식 매개 변수가 포함되어 있는지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성CustomAttributes이 멤버의 사용자 지정 특성을 포함하는 컬렉션을 가져옵니다. (MemberInfo에서 상속됨)
Public 속성DeclaringType메서드를 선언하는 형식을 가져옵니다. 동적 메서드의 경우에는 항상 null입니다. (MemberInfo.DeclaringType을(를) 재정의함)
Public 속성InitLocals메서드의 지역 변수가 0으로 초기화되는지 여부를 나타내는 값을 가져오거나 설정합니다.
Public 속성IsAbstract메서드가 추상 메서드인지 여부를 나타내는 값을 가져옵니다(Visual Basic에서는 MustInherit). (MethodBase에서 상속됨)
Public 속성IsAssemblyMethodAttributes.Assembly에서 이 메서드나 생성자의 잠재적 표시 유형을 설명하는지 여부를 나타내는 값을 가져옵니다. 즉, 이 메서드나 생성자는 같은 어셈블리의 다른 형식에만 표시되고 어셈블리 외부의 파생 형식에는 표시되지 않습니다. (MethodBase에서 상속됨)
Public 속성IsConstructor메서드가 생성자인지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성IsFamilyMethodAttributes.Family에서 이 메서드나 생성자의 표시 유형을 설명하는지 여부를 나타내는 값을 가져옵니다. 즉, 이 메서드나 생성자는 해당 클래스 및 파생 클래스에만 표시됩니다. (MethodBase에서 상속됨)
Public 속성IsFamilyAndAssemblyMethodAttributes.FamANDAssem에서 이 메서드나 생성자의 표시 유형을 설명하는지 여부를 나타내는 값을 가져옵니다. 즉, 이 메서드나 생성자는 같은 어셈블리에 있는 경우에만 파생 클래스에서 호출할 수 있습니다. (MethodBase에서 상속됨)
Public 속성IsFamilyOrAssemblyMethodAttributes.FamORAssem에서 이 메서드나 생성자의 잠재적 표시 유형을 설명하는지 여부를 나타내는 값을 가져옵니다. 즉, 이 메서드나 생성자는 파생 클래스(있는 경우) 및 같은 어셈블리의 클래스에서 호출할 수 있습니다. (MethodBase에서 상속됨)
Public 속성IsFinal이 메서드가 final(Visual Basic에서는 NotOverridable)인지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성IsGenericMethod메서드가 제네릭 메서드인지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성IsGenericMethodDefinition메서드가 제네릭 메서드 정의인지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성IsHideBySig동일한 서명이 있는 동일한 종류의 멤버만을 파생 클래스에서 숨길 수 있는지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성IsPrivate이 멤버가 private 멤버인지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성IsPublic이 메서드가 public 메서드인지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성IsSpecialName이 메서드의 이름이 특수한지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성IsStatic메서드가 static(Visual Basic에서는 Shared)인지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성IsVirtual메서드가 virtual(Visual Basic에서는 Overridable)인지 여부를 나타내는 값을 가져옵니다. (MethodBase에서 상속됨)
Public 속성MemberType이 멤버가 메서드임을 나타내는 MemberTypes 값을 가져옵니다. (MethodInfo에서 상속됨)
Public 속성MetadataToken메타데이터 요소를 식별하는 값을 가져옵니다. (MemberInfo에서 상속됨)
Public 속성MethodHandle동적 메서드에는 지원되지 않습니다. (MethodBase.MethodHandle을(를) 재정의함)
Public 속성MethodImplementationFlags메서드 구현의 특성을 지정하는 MethodImplAttributes 플래그를 가져옵니다. (MethodBase에서 상속됨)
Public 속성Module동적 메서드가 논리적으로 연결된 모듈을 가져옵니다. (MemberInfo.Module을(를) 재정의함)
Public 속성Name동적 메서드의 이름을 가져옵니다. (MemberInfo.Name을(를) 재정의함)
Public 속성ReflectedType메서드를 얻기 위해 리플렉션에서 사용된 클래스를 가져옵니다. (MemberInfo.ReflectedType을(를) 재정의함)
Public 속성ReturnParameter동적 메서드의 반환 매개 변수를 가져옵니다. (MethodInfo.ReturnParameter을(를) 재정의함)
Public 속성ReturnType동적 메서드의 반환 값 형식을 가져옵니다. (MethodInfo.ReturnType을(를) 재정의함)
Public 속성ReturnTypeCustomAttributes동적 메서드의 반환 형식에 대한 사용자 지정 특성을 가져옵니다. (MethodInfo.ReturnTypeCustomAttributes을(를) 재정의함)
맨 위
  이름설명
Public 메서드CreateDelegate(Type)동적 메서드를 완성하고 이 동적 메서드를 실행하는 데 사용할 수 있는 지정된 형식의 대리자를 만듭니다. (MethodInfo.CreateDelegate(Type)을(를) 재정의함)
Public 메서드CreateDelegate(Type, Object)동적 메서드를 완성하고, 대리자 형식과 대리자가 바인딩될 개체를 지정하여 이 메서드를 실행하는 데 사용할 수 있는 대리자를 만듭니다. (MethodInfo.CreateDelegate(Type, Object)을(를) 재정의함)
Public 메서드DefineParameter동적 메서드의 매개 변수를 정의합니다.
Public 메서드Equals이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (MethodInfo에서 상속됨)
Protected 메서드Finalize가비지 수집기에서 Object를 회수하기 전에 개체가 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨)
Public 메서드GetBaseDefinition메서드에 대한 기본 구현을 반환합니다. (MethodInfo.GetBaseDefinition()을(를) 재정의함)
Public 메서드GetCustomAttributes(Boolean)메서드에 정의된 모든 사용자 지정 특성을 반환합니다. (MemberInfo.GetCustomAttributes(Boolean)을(를) 재정의함)
Public 메서드GetCustomAttributes(Type, Boolean)메서드에 적용된 지정된 형식의 사용자 지정 특성을 반환합니다. (MemberInfo.GetCustomAttributes(Type, Boolean)을(를) 재정의함)
Public 메서드GetGenericArguments제네릭 메서드의 형식 인수 또는 제네릭 메서드 정의의 형식 매개 변수를 나타내는 Type 개체의 배열을 반환합니다. (MethodInfo에서 상속됨)
Public 메서드GetGenericMethodDefinition현재 메서드를 생성하는 데 사용할 수 있는 제네릭 메서드 정의를 나타내는 MethodInfo 개체를 반환합니다. (MethodInfo에서 상속됨)
Public 메서드GetHashCode이 인스턴스에 대한 해시 코드를 반환합니다. (MethodInfo에서 상속됨)
Public 메서드GetILGenerator()기본 MSIL(Microsoft Intermediate Language) 스트림 크기인 64바이트로 메서드에 대한 MSIL 생성기를 반환합니다.
Public 메서드GetILGenerator(Int32)지정된 MSIL(Microsoft Intermediate Language) 스트림 크기로 메서드에 대한 MSIL 생성기를 반환합니다.
Public 메서드GetMethodImplementationFlags메서드에 대한 구현 플래그를 반환합니다. (MethodBase.GetMethodImplementationFlags()을(를) 재정의함)
Public 메서드GetParameters동적 메서드의 매개 변수를 반환합니다. (MethodBase.GetParameters()을(를) 재정의함)
Public 메서드GetType현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Public 메서드Invoke(Object, Object[])지정된 매개 변수를 사용하여 현재 인스턴스가 나타내는 메서드나 생성자를 호출합니다. (MethodBase에서 상속됨)
Public 메서드Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)지정된 문화권 정보로 지정된 바인더의 제약 조건 하에서 지정된 매개 변수를 사용하여 동적 메서드를 호출합니다. (MethodBase.Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)을(를) 재정의함)
Public 메서드IsDefined지정된 사용자 지정 특성 형식이 정의되어 있는지 여부를 확인합니다. (MemberInfo.IsDefined(Type, Boolean)을(를) 재정의함)
Public 메서드MakeGenericMethod현재 제네릭 메서드 정의의 형식 매개 변수를 형식 배열의 요소로 대체하고, 생성된 메서드를 나타내는 MethodInfo 개체를 반환합니다. (MethodInfo에서 상속됨)
Protected 메서드MemberwiseClone현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)
Public 메서드ToString문자열로 표현된 메서드 서명을 반환합니다. (Object.ToString()을(를) 재정의함)
맨 위
  이름설명
Public 확장 메서드GetCustomAttribute(Type)오버로드. 지정된 멤버에 적용되는 지정된 형식의 사용자 지정 특성을 검색합니다. (CustomAttributeExtensions에서 정의됨)
Public 확장 메서드GetCustomAttribute(Type, Boolean)오버로드. 지정된 멤버에 적용되는 지정된 형식의 사용자 지정 특성을 검색하고 경우에 따라 해당 멤버의 상위 항목을 검사합니다. (CustomAttributeExtensions에서 정의됨)
Public 확장 메서드GetCustomAttribute<T>()오버로드. 지정된 멤버에 적용되는 지정된 형식의 사용자 지정 특성을 검색합니다. (CustomAttributeExtensions에서 정의됨)
Public 확장 메서드GetCustomAttribute<T>(Boolean)오버로드. 지정된 멤버에 적용되는 지정된 형식의 사용자 지정 특성을 검색하고 경우에 따라 해당 멤버의 상위 항목을 검사합니다. (CustomAttributeExtensions에서 정의됨)
Public 확장 메서드GetCustomAttributes()오버로드. 지정한 멤버에 적용되는 사용자 지정 특성의 컬렉션을 검색합니다. (CustomAttributeExtensions에서 정의됨)
Public 확장 메서드GetCustomAttributes(Type)오버로드. 지정된 멤버에 적용되는 지정된 형식의 사용자 지정 특성 컬렉션을 검색합니다. (CustomAttributeExtensions에서 정의됨)
Public 확장 메서드GetCustomAttributes<T>()오버로드. 지정된 멤버에 적용되는 지정된 형식의 사용자 지정 특성 컬렉션을 검색합니다. (CustomAttributeExtensions에서 정의됨)
Public 확장 메서드GetCustomAttributes<T>(Boolean)오버로드. 지정된 멤버에 적용되는 지정된 형식의 사용자 지정 특성 컬렉션을 검색하고 경우에 따라 해당 멤버의 상위 항목을 검사합니다. (CustomAttributeExtensions에서 정의됨)
Public 확장 메서드GetRuntimeBaseDefinition메서드가 처음 선언된 직접 또는 간접 기본 클래스에서 지정된 메서드를 나타내는 개체를 검색합니다. (RuntimeReflectionExtensions에서 정의됨)
Public 확장 메서드IsDefined지정된 형식의 사용자 지정 특성이 지정된 멤버에 적용되는지 여부를 나타냅니다. (CustomAttributeExtensions에서 정의됨)
맨 위

DynamicMethod 클래스를 사용하면 메서드를 포함할 동적 어셈블리 및 동적 형식을 생성하지 않고도 런타임에 메서드를 생성하고 실행할 수 있습니다. DynamicMethod 개체를 회수하면 JIT(Just-In-Time) 컴파일러에서 만든 실행 코드가 회수됩니다. 동적 메서드는 적은 양의 코드를 생성하고 실행하는 데 가장 효율적인 방법입니다.

Windows Phone 응용프로그램에서는 모든 동적 메서드가 익명으로 호스트됩니다. 익명으로 호스팅된 동적 메서드는 시스템에서 제공하는 어셈블리에 배치되므로 다른 코드로부터 격리됩니다. 이 메서드는 public이 아닌 데이터에 액세스할 수 없습니다.

동적 메서드 및 해당 매개 변수에 이름을 지정할 필요는 없지만 이름을 지정하면 디버깅하는 데 도움이 됩니다. 동적 메서드나 해당 매개 변수에는 사용자 지정 특성이 지원되지 않습니다.

참고참고:

동적 메서드는 기호 정보(지역 변수 이름 및 줄 번호 매핑)를 지원하지 않습니다. 이후 버전에서는 이러한 제한이 사라질 것입니다.

동적 메서드는 static 메서드(Visual Basic에서는 Shared 메서드)처럼 동작하지만 대리자 바인딩 규칙을 사용하면 해당 대리자 인스턴스를 사용하여 동적 메서드를 호출할 때 인스턴스 메서드처럼 동작하도록 개체에 바인딩할 수 있습니다. 이러한 동작을 보여 주는 예제는 CreateDelegate(Type, Object) 메서드 오버로드를 참조하세요. 대리자 바인딩 규칙에 대한 자세한 내용은 Delegate 클래스를 참조하세요.

다음 예제에서는 두 개의 매개 변수를 사용하는 동적 메서드를 만듭니다. 이 예제에서는 형식이 지정된 문자열을 반환하는 간단한 함수 본문을 내보냅니다. 첫 번째 매개 변수는 메서드에서 형식이 지정된 문자열에 포함하는 문자열이며, 두 번째 매개 변수는 메서드에서 제곱한 다음 형식이 지정된 문자열에 포함하는 정수입니다. 또한 대리자를 만들어 메서드를 완성하고, 다른 매개 변수를 사용하여 대리자를 호출하고, 마지막으로 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

Windows Phone

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 모든 인스턴스 멤버는 스레드로부터 안전하지 않을 수 있습니다.

이 정보가 도움이 되었습니까?
(1500자 남음)
의견을 주셔서 감사합니다.
표시:
© 2014 Microsoft. All rights reserved.