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

Так как 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
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. По имени и подписи считает, что все части сигнатуры, включая настраиваемые модификаторы, возвращают типы, типы параметров, меток и соглашения о неуправляемых вызовах.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, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.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. Настраиваемые атрибуты не являются частью система общих типов CTS.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). Его не удастся найти инициализаторы класса (.cctor).It will not find class initializers (.cctor). Чтобы найти инициализаторы класса, используйте перегрузку, принимающую 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) 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

Битовая маска, составленная из одного или нескольких объектов BindingFlags и указывающая, как ведется поиск.A bitmask comprised of one or more BindingFlags that specify how the search is conducted.

-или--or- Нуль, чтобы было возвращено значение null.Zero, to return null.

Возвраты

Массив объектов 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

Так как 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
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.

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

Если точное соответствие не существует, binder попытается преобразовать типы параметров, указанные в types массива, чтобы найти совпадение.If an exact match does not exist, the binder will attempt to coerce the parameter types specified in the types array in order to select a match. Если binder не удается найти совпадение, затем null возвращается.If the binder is unable to select a match, then null is returned.

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

  • Необходимо указать либо BindingFlags.Instance или BindingFlags.Static Чтобы получить возвращаемое значение.You must specify either BindingFlags.Instance or BindingFlags.Static in order to get a return.

  • Укажите BindingFlags.Public для включения в поиск открытых конструкторов.Specify BindingFlags.Public to include public constructors in the search.

  • Укажите BindingFlags.NonPublic для включения в поиск закрытые конструкторы (то есть внутренней, закрытые и защищенные конструкторы).Specify BindingFlags.NonPublic to include non-public constructors (that is, private, internal, and protected constructors) in the search. Конструкторы базовых классов не возвращаются.Constructors of base classes are not returned.

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

Чтобы получить инициализатор класса (.cctor), с помощью этой перегрузки метода, необходимо указать BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic в Visual Basic).To get the class initializer (.cctor) using this method overload, you must 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.

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

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