Type.GetConstructors Метод

Определение

Получает конструкторы текущего объекта Type.Gets the constructors of the current Type.

Перегрузки

GetConstructors()

Возвращает все открытые конструкторы, определенные для текущего объекта Type.Returns all the public constructors defined for the current Type.

GetConstructors(BindingFlags)

При переопределении в производном классе ищет конструкторы, определенные для текущего объекта Type, с использованием указанного объекта BindingFlags.When overridden in a derived class, searches for the constructors defined for the current Type, using the specified BindingFlags.

GetConstructors()

Возвращает все открытые конструкторы, определенные для текущего объекта Type.Returns all the public constructors defined for the current Type.

public:
 virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors ();
abstract member GetConstructors : unit -> System.Reflection.ConstructorInfo[]
override this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
Public Function GetConstructors () As ConstructorInfo()

Возвраты

Массив объектов ConstructorInfo, представляющий все открытые конструкторы экземпляров, определенные для текущего типа Type, за исключением инициализатора типа (статический конструктор).An array of ConstructorInfo objects representing all the public instance constructors defined for the current Type, but not including the type initializer (static constructor). Если для текущего объекта Type открытые конструкторы экземпляров не определены или если текущий объект Type представляет параметр типа в определении универсального типа или метода, возвращается пустой массив типа ConstructorInfo.If no public instance constructors are defined for the current Type, or if the current Type represents a type parameter in the definition of a generic type or generic method, an empty array of type ConstructorInfo is returned.

Реализации

Атрибуты

Примеры

В этом примере показаны выходные данные перегрузки GetConstructors из класса, который имеет два конструктора экземпляров и один статический конструктор.This example shows the output of the GetConstructors overload from a class that has two instance constructors and one static constructor.

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   static t(){}

   t( int /*i*/ ){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors();
   Console::WriteLine( p->Length );
   for ( int i = 0; i < p->Length; i++ )
   {
      Console::WriteLine( p[ i ]->IsStatic );

   }
}
using System;
using System.Reflection;

public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors();
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}
Imports System.Reflection

Public Class t
    
    Public Sub New()
    End Sub
    
    Shared Sub New()
    End Sub
    
    Public Sub New(i As Integer)
    End Sub
     
    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(t).GetConstructors()
        Console.WriteLine(p.Length)
        
        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

Выходные данные этого кода:The output of this code is:

22

FalseFalse

FalseFalse

Поскольку перегрузка GetConstructors() использует только BindingFlags.Public и BindingFlags.Instance, статический конструктор не подсчитывается выражением for и не вычисляется IsStatic.Because the GetConstructors() overload uses only BindingFlags.Public and BindingFlags.Instance, the static constructor is neither counted by the for expression nor evaluated by IsStatic.

Чтобы найти статические конструкторы, используйте перегрузку GetConstructors(BindingFlags) и передайте сочетание (логическое OR) BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, как показано в следующем примере кода:To find static constructors, use the GetConstructors(BindingFlags) overload, and pass the combination (logical OR) of BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, as shown in the following code example:

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   t( int /*i*/ ){}

   static t(){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static | BindingFlags::NonPublic | BindingFlags::Instance) );
   Console::WriteLine( p->Length );
   for ( int i = 0; i < p->Length; i++ )
   {
      Console::WriteLine( p[ i ]->IsStatic );
   }
}
using System;
using System.Reflection;
 
public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors(
           BindingFlags.Public | BindingFlags.Static |
           BindingFlags.NonPublic | BindingFlags.Instance);
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}
Imports System.Reflection

Public Class t
    
    Public Sub New()
    End Sub
    
    Shared Sub New()
    End Sub
    
    Public Sub New(i As Integer)
    End Sub
     
    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(T).GetConstructors( _
           BindingFlags.Public Or _
           BindingFlags.Static Or _
           BindingFlags.NonPublic Or _
           BindingFlags.Instance)
        Console.WriteLine(p.Length)
        
        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

Выходные данные будут выглядеть следующим образом:Now the output is:

33

FalseFalse

ДаTrue

FalseFalse

Комментарии

Метод GetConstructors не возвращает конструкторы в определенном порядке, например в порядке объявления.The GetConstructors method does not return constructors in a particular order, such as declaration order. Код не должен зависеть от порядка, в котором возвращаются конструкторы, так как этот порядок меняется.Your code must not depend on the order in which constructors are returned, because that order varies.

В следующей таблице показаны элементы базового класса, возвращаемые методами Get при отражении в типе.The following table shows what members of a base class are returned by the Get methods when reflecting on a type.

Тип членаMember Type СтатическиеStatic Не статическийNon-Static
КонструкторConstructor НетNo НетNo
ПолеField НетNo Да.Yes. Поле всегда скрывается по имени и сигнатуре.A field is always hide-by-name-and-signature.
событиеEvent НеприменимоNot applicable Правило системы общих типов — это то же наследование, что и методы, реализующие свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражение рассматривает свойства как скрытые по имени и сигнатуре.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below.
МетодMethod НетNo Да.Yes. Метод (как виртуальный, так и невиртуальный) может быть скрыт по имени или скрытию по имени и сигнатуре.A method (both virtual and non-virtual) can be hide-by-name or hide-by-name-and-signature.
Вложенный типNested Type НетNo НетNo
Свойство.Property НеприменимоNot applicable Правило системы общих типов — это то же наследование, что и методы, реализующие свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражение рассматривает свойства как скрытые по имени и сигнатуре.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below.
  1. При скрытии по имени и сигнатуре учитываются все части сигнатуры, включая пользовательские модификаторы, возвращаемые типы, типы параметров, Sentinel и неуправляемые соглашения о вызовах.Hide-by-name-and-signature considers all of the parts of the signature, including custom modifiers, return types, parameter types, sentinels, and unmanaged calling conventions. Это двоичное сравнение.This is a binary comparison.

  2. Для отражения свойства и события скрываются по имени и сигнатуре.For reflection, properties and events are hide-by-name-and-signature. Если у вас есть свойство с методом доступа get и Set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.If you have a property with both a get and a set accessor in the base class, but the derived class has only a get accessor, the derived class property hides the base class property, and you will not be able to access the setter on the base class.

  3. Настраиваемые атрибуты не являются частью системы общих типов.Custom attributes are not part of the common type system.

Эта перегрузка метода вызывает перегрузку метода GetConstructors(BindingFlags) с BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance в Visual Basic).This method overload calls the GetConstructors(BindingFlags) method overload, with BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance in Visual Basic). Инициализаторы классов не будут найдены (статический конструктор).It will not find class initializers (static constructor). Чтобы найти инициализаторы классов, используйте перегрузку, которая принимает BindingFlags, и | укажите BindingFlags.Static BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic в Visual Basic).To find class initializers, use an overload that takes BindingFlags, and specify BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). Инициализатор класса также можно получить с помощью свойства TypeInitializer.You can also get the class initializer using the TypeInitializer property.

Если текущий Type представляет сконструированный универсальный тип, этот метод возвращает объекты ConstructorInfo с параметрами типа, замененными соответствующими аргументами типа.If the current Type represents a constructed generic type, this method returns the ConstructorInfo objects with the type parameters replaced by the appropriate type arguments. Например, если класс C<T> имеет конструктор C(T t1) (Sub New(ByVal t1 As T) в Visual Basic), вызов GetConstructors в C<int> возвращает ConstructorInfo, который представляет C(int t1) в C# (Sub New(ByVal t1 As Integer) в Visual Basic).For example, if class C<T> has a constructor C(T t1) (Sub New(ByVal t1 As T) in Visual Basic), calling GetConstructors on C<int> returns a ConstructorInfo that represents C(int t1) in C# (Sub New(ByVal t1 As Integer) in Visual Basic).

Если текущий Type представляет параметр универсального типа, метод GetConstructors возвращает пустой массив.If the current Type represents a generic type parameter, the GetConstructors method returns an empty array.

Дополнительно

GetConstructors(BindingFlags)

При переопределении в производном классе ищет конструкторы, определенные для текущего объекта Type, с использованием указанного объекта BindingFlags.When overridden in a derived class, searches for the constructors defined for the current Type, using the specified BindingFlags.

public:
 abstract cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors(System::Reflection::BindingFlags bindingAttr);
[System.Runtime.InteropServices.ComVisible(true)]
public abstract System.Reflection.ConstructorInfo[] GetConstructors (System.Reflection.BindingFlags bindingAttr);
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
Public MustOverride Function GetConstructors (bindingAttr As BindingFlags) As ConstructorInfo()

Параметры

bindingAttr
BindingFlags

Побитовое сочетание значений перечисления, указывающих способ проведения поиска.A bitwise combination of the enumeration values that specify how the search is conducted.

- или --or- Default для возврата пустого массива.Default to return an empty array.

Возвраты

Массив объектов ConstructorInfo, представляющий все конструкторы, определенные для текущего объекта Type и удовлетворяющие указанным ограничениям привязки, в том числе и инициализатор типа, если он определен.An array of ConstructorInfo objects representing all constructors defined for the current Type that match the specified binding constraints, including the type initializer if it is defined. Возвращает пустой массив типа ConstructorInfo, если для текущего типа Type не определены конструкторы, если ни один из определенных конструкторов не соответствует ограничениям привязки или если текущий тип Type представляет параметр типа в определении универсального типа или метода.Returns an empty array of type ConstructorInfo if no constructors are defined for the current Type, if none of the defined constructors match the binding constraints, or if the current Type represents a type parameter in the definition of a generic type or generic method.

Реализации

Атрибуты

Примеры

В этом примере показаны выходные данные перегрузки GetConstructors() из класса, который имеет два конструктора экземпляров и один статический конструктор.This example shows the output of the GetConstructors() overload from a class that has two instance constructors and one static constructor.

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   static t(){}

   t( int /*i*/ ){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors();
   Console::WriteLine( p->Length );
   for ( int i = 0; i < p->Length; i++ )
   {
      Console::WriteLine( p[ i ]->IsStatic );

   }
}
using System;
using System.Reflection;

public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors();
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}
Imports System.Reflection

Public Class t
    
    Public Sub New()
    End Sub
    
    Shared Sub New()
    End Sub
    
    Public Sub New(i As Integer)
    End Sub
     
    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(t).GetConstructors()
        Console.WriteLine(p.Length)
        
        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

Выходные данные этого кода:The output of this code is:

22

FalseFalse

FalseFalse

Поскольку перегрузка GetConstructors использует только Public и Instance, статический конструктор не подсчитывается выражением for и не вычисляется IsStatic.Because the GetConstructors overload uses only Public and Instance, the static constructor is neither counted by the for expression nor evaluated by IsStatic.

Чтобы найти статические конструкторы, используйте перегрузку GetConstructors и передайте ей сочетание (логическое или) BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, как показано в следующем примере кода:To find static constructors, use the GetConstructors overload, and pass it the combination (logical OR) of BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, as shown in the following code example:

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   t( int /*i*/ ){}

   static t(){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static | BindingFlags::NonPublic | BindingFlags::Instance) );
   Console::WriteLine( p->Length );
   for ( int i = 0; i < p->Length; i++ )
   {
      Console::WriteLine( p[ i ]->IsStatic );
   }
}
using System;
using System.Reflection;
 
public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors(
           BindingFlags.Public | BindingFlags.Static |
           BindingFlags.NonPublic | BindingFlags.Instance);
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}
Imports System.Reflection

Public Class t
    
    Public Sub New()
    End Sub
    
    Shared Sub New()
    End Sub
    
    Public Sub New(i As Integer)
    End Sub
     
    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(T).GetConstructors( _
           BindingFlags.Public Or _
           BindingFlags.Static Or _
           BindingFlags.NonPublic Or _
           BindingFlags.Instance)
        Console.WriteLine(p.Length)
        
        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

Выходные данные будут выглядеть следующим образом:Now the output is:

33

FalseFalse

ДаTrue

FalseFalse

Комментарии

bindingAttr можно использовать, чтобы указать, следует ли возвращать только открытые конструкторы или открытые и не являющиеся открытыми конструкторы.bindingAttr can be used to specify whether to return only public constructors or both public and non-public constructors.

Для определения конструкторов, включаемых в поиск, можно использовать следующие флаги фильтра BindingFlags.The following BindingFlags filter flags can be used to define which constructors to include in the search:

  • Укажите BindingFlags.Static вместе с BindingFlags.NonPublic, чтобы получить инициализатор класса (статический конструктор).Specify BindingFlags.Static along with BindingFlags.NonPublic to retrieve the class initializer (static constructor). Инициализатор класса также можно получить с помощью свойства TypeInitializer.You can also get the class initializer using the TypeInitializer property.

  • Укажите BindingFlags.Instance, а также один или оба BindingFlags.Public и BindingFlags.NonPublic, чтобы получить конструкторы экземпляров.Specify BindingFlags.Instance along with one or both of BindingFlags.Public and BindingFlags.NonPublic to retrieve instance constructors.

Дополнительные сведения см. в разделе System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Метод GetConstructors не возвращает конструкторы в определенном порядке, например в порядке объявления.The GetConstructors method does not return constructors in a particular order, such as declaration order. Код не должен зависеть от порядка, в котором возвращаются конструкторы, так как этот порядок меняется.Your code must not depend on the order in which constructors are returned, because that order varies.

Если текущий Type представляет сконструированный универсальный тип, этот метод возвращает объекты ConstructorInfo с параметрами типа, замененными соответствующими аргументами типа.If the current Type represents a constructed generic type, this method returns the ConstructorInfo objects with the type parameters replaced by the appropriate type arguments. Например, если класс C<T> имеет конструктор C(T t1) (Sub New(ByVal t1 As T) в Visual Basic), вызов GetConstructors в C<int> возвращает ConstructorInfo, который представляет C(int t1) в C# (Sub New(ByVal t1 As Integer) в Visual Basic).For example, if class C<T> has a constructor C(T t1) (Sub New(ByVal t1 As T) in Visual Basic), calling GetConstructors on C<int> returns a ConstructorInfo that represents C(int t1) in C# (Sub New(ByVal t1 As Integer) in Visual Basic).

Если текущий Type представляет параметр универсального типа, метод GetConstructors возвращает пустой массив.If the current Type represents a generic type parameter, the GetConstructors method returns an empty array.

Дополнительно

Применяется к