Type.GetConstructors Type.GetConstructors Type.GetConstructors Type.GetConstructors Method

Определение

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

Перегрузки

GetConstructors() GetConstructors() GetConstructors() GetConstructors()

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

GetConstructors(BindingFlags) GetConstructors(BindingFlags) GetConstructors(BindingFlags) GetConstructors(BindingFlags)

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

GetConstructors() GetConstructors() GetConstructors() 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
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

BindingFlags.Public BindingFlags.Instance for Поскольку перегрузка использует только и, статический конструктор не подсчитывается выражением и не вычисляется IsStatic. GetConstructors()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.Instance) BindingFlags.Publicиз BindingFlags.Static, BindingFlags.NonPublic,,, как показано в следующем примере кода: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
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 StaticStatic Не статический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.Public OrвVisualBasic) BindingFlags.Instance .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.Static | BindingFlags.NonPublic укажите (Or BindingFlags.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<int> GetConstructors Sub New(ByVal t1 As T) C(T t1) ( C# Sub New(ByVal t1 As Integer) C(int t1) в Visual Basic), вызов метода On возвращает ,которыйпредставляетв(вVisualConstructorInfo 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).

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

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

GetConstructors(BindingFlags) GetConstructors(BindingFlags) GetConstructors(BindingFlags) 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 BindingFlags BindingFlags 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
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

Public Instance for Поскольку перегрузка использует только и, статический конструктор не подсчитывается выражением и не вычисляется IsStatic. GetConstructorsBecause 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
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<int> GetConstructors Sub New(ByVal t1 As T) C(T t1) ( C# Sub New(ByVal t1 As Integer) C(int t1) в Visual Basic), вызов метода On возвращает ,которыйпредставляетв(вVisualConstructorInfo 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).

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

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

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