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

Type.GetConstructors 方法

2013/12/13

返回为当前 Type 定义的所有公共构造函数。

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

public ConstructorInfo[] GetConstructors()

返回值

类型: System.Reflection.ConstructorInfo []
ConstructorInfo 对象数组,表示当前 Type 定义的所有公共实例构造函数,但不包括类型初始值设定项(静态构造函数)。如果没有为当前 Type 定义公共实例构造函数,或者当前 Type 表示泛型类型或泛型方法的定义中的类型参数,则返回 ConstructorInfo 类型的空数组。

GetConstructors 方法不按特定的顺序(如声明顺序)返回构造函数。您的代码一定不能依赖于构造函数的返回顺序,因为该顺序可以改变。

下表显示当反映到某个类型时,Get 方法返回基类的哪些成员。

成员类型

静态

非静态

构造函数

字段

是。字段总是按名称和签名隐藏。

事件

不适用

常规类型系统规则是:该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

方法

是。方法(虚方法和非虚方法)可按名称隐藏或按名称和签名隐藏。

嵌套类型

属性

不适用

常规类型系统规则是:该继承与实现属性的方法的继承相同。反射将属性视为按名称和签名隐藏。请参见下面的“注意 2”。

说明:

  1. 按名称和签名隐藏会考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、标记和非托管调用约定。这是二进制比较。

  2. 对于反射,属性和事件按名称和签名隐藏。如果基类中有同时带 get 访问器和 set 访问器的属性,但派生类中仅有 get 访问器,则派生类属性隐藏基类属性,并且您将无法访问基类的设置程序。

  3. 自定义特性不是常规类型系统的组成部分。

此方法重载使用 BindingFlags.Public | BindingFlags.Instance(在 Visual Basic 中为 BindingFlags.PublicOrBindingFlags.Instance)调用 GetConstructors(BindingFlags) 方法重载。它将不查找类初始值设定项 (.cctor)。若要查找类初始值设定项,请使用采用 BindingFlags 的重载并指定 BindingFlags.Static | BindingFlags.NonPublic(在 Visual Basic 中为 BindingFlags.StaticOrBindingFlags.NonPublic)。

如果当前 Type 表示构造泛型类型,则此方法将返回 ConstructorInfo 对象,并且其类型形参替换为相应的类型实参。例如,如果类 C<T> 有一个构造函数 C(T t1)(在 Visual Basic 中为 Sub New(ByVal t1 As T)),那么调用 C<int> 上的 GetConstructors 将返回在 C# 中表示 C(int t1)(在 Visual Basic 中为 Sub New(ByVal t1 As Integer))的 ConstructorInfo

如果当前 Type 表示泛型类型形参,则 GetConstructors 方法将返回一个空数组。

此示例演示对具有一个公共实例构造函数、一个受保护的实例构造函数和一个静态构造函数(在 Visual Basic 中为 Shared 构造函数)的类调用两个 GetConstructors 重载的结果。

由于 GetConstructors() 重载仅使用 BindingFlags.PublicBindingFlags.Instance,因此将不显示静态构造函数和受保护的实例构造函数。

若要查找所有构造函数,请将 GetConstructors(BindingFlags) 重载与 BindingFlags.PublicBindingFlags.StaticBindingFlags.NonPublicBindingFlags.Instance 的组合(逻辑 OR)一起使用。

说明注意:

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


using System.Reflection;

public class Example
{
   protected Example() {}

   static Example() {}

   public Example(int i) {}

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      outputBlock.Text += "Constructors found by GetConstructors():\n";
      foreach (ConstructorInfo ci in typeof(Example).GetConstructors())
      {
         outputBlock.Text += ci.ToString() + "\n";
      }

      outputBlock.Text += "\nConstructors found by GetConstructors(BindingFlags):\n";
      foreach (ConstructorInfo ci in typeof(Example).GetConstructors(
         BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic |
         BindingFlags.Instance))
      {

         outputBlock.Text += ci.ToString() + "\n";
      }
   }
}

/* This example produces the following output:

Constructors found by GetConstructors():
Void .ctor(Int32)

Constructors found by GetConstructors(BindingFlags):
Void .ctor()
Void .cctor()
Void .ctor(Int32)
 */


Windows Phone OS

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

Windows Phone

显示: