信息
您所需的主题如下所示。但此主题未包含在此库中。

Type.GetMethod 方法 (String, BindingFlags, Binder, Type[], ParameterModifier[])

2013/12/13

使用指定绑定约束,搜索其参数与指定参数类型及修饰符匹配的指定方法。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

public MethodInfo GetMethod(
	string name,
	BindingFlags bindingAttr,
	Binder binder,
	Type[] types,
	ParameterModifier[] modifiers
)

参数

name
类型: System.String
包含要获取的方法名称的 String
bindingAttr
类型: System.Reflection.BindingFlags
一个位掩码,由一个或多个指定搜索执行方式的 BindingFlags 组成。
- 或 -
零,以返回 null
binder
类型: System.Reflection.Binder
一个 Binder 对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
空引用(Visual Basic 为 Nothing),要使用 DefaultBinder
types
类型: System.Type []
表示此方法要获取的参数的个数、顺序和类型的 Type 对象数组。
- 或 -
空的 Type 对象数组(由 EmptyTypes 字段提供),用来获取不采用参数的方法。
modifiers
类型: System.Reflection.ParameterModifier []
ParameterModifier 对象数组,表示与 types 数组中的相应元素关联的属性。仅当通过 COM 互操作进行调用时才使用,而且仅处理通过引用传递的参数。默认的联编程序不处理此参数。

返回值

类型: System.Reflection.MethodInfo
表示符合指定要求的方法的 MethodInfo 对象(如果找到的话);否则为 null

实现

IReflect.GetMethod(String, BindingFlags, Binder, Type[], ParameterModifier[])

异常条件
AmbiguousMatchException

找到多个有指定名称且与指定绑定约束匹配的方法。

ArgumentNullException

namenull

- 或 -

typesnull

- 或 -

types 中的一个元素为 null

ArgumentException

types 是多维的。

- 或 -

modifiers 是多维的。

虽然默认联编程序不处理 ParameterModifiermodifiers 参数),但您可以使用抽象 System.Reflection.Binder 类编写确实处理 modifiers 的自定义联编程序。ParameterModifier 仅当通过 COM 互操作进行调用时才使用,而且仅处理通过引用传递的参数。

types 数组和 modifiers 数组的长度相同。types 数组中指定的参数可具有下列在 modifiers 数组中指定的特性:pdIn、pdOut、pdLcid、pdRetval、pdOptional 和 pdHasDefault,它们分别表示 [In]、[Out]、[lcid]、[retval]、[optional] 和一个指定参数是否有默认值的值。参数的关联特性存储在元数据中并且增强了交互操作。

可以使用下列 BindingFlags 筛选标志定义包含在搜索中的方法:

  • 为了获取返回值,必须指定 BindingFlags.InstanceBindingFlags.Static

  • 指定 BindingFlags.Public 可在搜索中包含公共方法。

  • 指定 BindingFlags.NonPublic 可在搜索中包含非公共方法(即私有方法和受保护的方法)。

  • 指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括 publicprotected 静态成员;不包括继承类中的 private 静态成员。

下列 BindingFlags 修饰符标志可用于更改搜索的执行方式:

  • BindingFlags.IgnoreCase,表示忽略 name 的大小写。

  • BindingFlags.DeclaredOnly,表示仅搜索在 Type 上声明的方法,而不搜索简单继承的方法。

有关更多信息,请参见 System.Reflection.BindingFlags

说明注意:

查找构造函数和方法时不能省略参数。只能在调用时省略参数。

如果当前 T:System.Type 表示某种已构造的泛型类型,则此方法将返回 MethodInfo,并且其类型参数由相应的类型参数替换。

如果当前 Type 表示泛型类型或泛型方法的定义中的类型参数,则此方法搜索类约束的方法或 Object 的方法(如果没有类约束的话)。

说明注意:

对于泛型方法,请不要在 name 中包括此类型参数。例如,C# 代码 GetMember("MyMethod<int>") 搜索文本名称为“MyMethod<int>”的成员,而不是搜索一个名为 MyMethod 的方法,该方法具有一个 int 类型的泛型参数。

下面的示例查找 MethodA 的特定重载,并指定绑定约束和各种参数类型。

说明注意:

要运行此示例,请参见生成具有静态 Windows Phone TextBlock 控件的示例



using System;
using System.Reflection;

class Example
{
   // Methods to get:

   public void MethodA(int i, int j) { }

   public void MethodA(int[] i) { }

   public void MethodA(ref int r) { }

   // Method that takes an out parameter.
   public void MethodA(int i, out int o) { o = 100; }


   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      MethodInfo mInfo;

      // Get MethodA(int i, int j)
      mInfo = typeof(Example).GetMethod("MethodA",
          BindingFlags.Public | BindingFlags.Instance,
          null,
          new Type[] { typeof(int), typeof(int) },
          null);
      outputBlock.Text += String.Format("Found method: {0}", mInfo) + "\n";

      // Get MethodA(int[] i)
      mInfo = typeof(Example).GetMethod("MethodA",
          BindingFlags.Public | BindingFlags.Instance,
          null,
          new Type[] { typeof(int[]) },
          null);
      outputBlock.Text += String.Format("Found method: {0}", mInfo) + "\n";

      // Get MethodA(ref int r)
      mInfo = typeof(Example).GetMethod("MethodA",
          BindingFlags.Public | BindingFlags.Instance,
          null,
          new Type[] { typeof(int).MakeByRefType() },
          null);
      outputBlock.Text += String.Format("Found method: {0}", mInfo) + "\n";

      // Get MethodA(int i, out int o)
      mInfo = typeof(Example).GetMethod("MethodA",
          BindingFlags.Public | BindingFlags.Instance,
          null,
          new Type[] { typeof(int), typeof(int).MakeByRefType() },
          null);
      outputBlock.Text += String.Format("Found method: {0}", mInfo) + "\n";

   }
}

/* This method produces the following output:

Found method: Void MethodA(Int32, Int32)
Found method: Void MethodA(Int32[])
Found method: Void MethodA(Int32 ByRef)
Found method: Void MethodA(Int32, Int32 ByRef)
  */


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示: