Прочитать на английском

Поделиться через


Type.GetConstructors Метод

Определение

Получает конструкторы текущего объекта Type.

Перегрузки

GetConstructors()

Возвращает все открытые конструкторы, определенные для текущего объекта Type.

GetConstructors(BindingFlags)

При переопределении в производном классе ищет конструкторы, определенные для текущего объекта Type, с использованием указанного объекта BindingFlags.

Примеры

В этом примере показаны выходные данные перегрузки GetConstructors() класса с двумя конструкторами экземпляров и одним статическим конструктором.

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);
        }
    }
}

Выходные данные этого кода:

2
False
False

Так как перегрузка GetConstructors использует только Public и Instance, статический конструктор не учитывается выражением for и не вычисляется .IsStatic

Чтобы найти статические конструкторы, используйте перегрузку GetConstructors и передайте ей сочетание (логическое ИЛИ) BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instanceкак показано в следующем примере кода:

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);
        }
    }
}

Теперь выходные данные:

3
False
True
False

GetConstructors()

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

Возвращает все открытые конструкторы, определенные для текущего объекта Type.

public System.Reflection.ConstructorInfo[] GetConstructors ();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors ();

Возвращаемое значение

Массив объектов ConstructorInfo, представляющий все открытые конструкторы экземпляров, определенные для текущего типа Type, за исключением инициализатора типа (статический конструктор). Если для текущего объекта Type открытые конструкторы экземпляров не определены или если текущий объект Type представляет параметр типа в определении универсального типа или метода, возвращается пустой массив типа ConstructorInfo.

Реализации

Атрибуты

Комментарии

В .NET 6 и более ранних версиях GetConstructors метод не возвращает конструкторы в определенном порядке, например в порядке объявления. Код не должен зависеть от порядка, в котором возвращаются конструкторы, так как этот порядок отличается. Однако, начиная с .NET 7, порядок детерминирован на основе порядка метаданных в сборке.

В следующей таблице показано, какие члены базового класса возвращаются методами Get при отражении в типе.

Тип члена Статические Нестатическое
Конструктор Нет Нет
Поле Нет Да. Поле всегда имеет значение hide-by-name-and-signature.
Событие Неприменимо Общее правило системы типов состоит в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение рассматривает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
Метод Нет Да. Метод (как виртуальный, так и не виртуальный) может иметь значение hide-by-name или hide-by-name-and-signature.
Вложенный тип Нет Нет
Свойство. Неприменимо Общее правило системы типов состоит в том, что наследование совпадает с наследованием методов, реализующих свойство . Отражение рассматривает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже.
  1. Функция скрытия по имени и подписи учитывает все части сигнатуры, включая пользовательские модификаторы, типы возвращаемых значений, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.

  2. Для отражения свойства и события представляют собой скрытие по имени и сигнатуре. Если у вас есть свойство с методом доступа get и set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.

  3. Настраиваемые атрибуты не являются частью системы общих типов.

Эта перегрузка метода вызывает перегрузку GetConstructors(BindingFlags) метода с BindingFlags.PublicBindingFlags.Instance | (BindingFlags.PublicOrBindingFlags.Instance в Visual Basic). Он не будет находить инициализаторы класса (статический конструктор). Чтобы найти инициализаторы класса, используйте перегрузку, которая принимает BindingFlags, и укажите | BindingFlags.NonPublicBindingFlags.Static(BindingFlags.StaticOrBindingFlags.NonPublic в Visual Basic). Вы также можете получить инициализатор класса с помощью TypeInitializer свойства .

Если текущий Type представляет сконструированный универсальный тип, этот метод возвращает ConstructorInfo объекты с параметрами типа, замененными соответствующими аргументами типа. Например, если класс C<T> имеет конструктор C(T t1) (Sub New(ByVal t1 As T) в Visual Basic), вызов C<int>GetConstructors метода возвращает ConstructorInfo объект , представляющий C(int t1) в C# (Sub New(ByVal t1 As Integer) в Visual Basic).

Если текущий Type объект представляет параметр универсального GetConstructors типа, метод возвращает пустой массив.

См. также раздел

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

.NET 9 и другие версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetConstructors(BindingFlags)

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

При переопределении в производном классе ищет конструкторы, определенные для текущего объекта Type, с использованием указанного объекта BindingFlags.

public abstract System.Reflection.ConstructorInfo[] GetConstructors (System.Reflection.BindingFlags bindingAttr);
[System.Runtime.InteropServices.ComVisible(true)]
public abstract System.Reflection.ConstructorInfo[] GetConstructors (System.Reflection.BindingFlags bindingAttr);

Параметры

bindingAttr
BindingFlags

Побитовое сочетание значений перечисления, указывающих способ проведения поиска.

-или-

Default для возврата пустого массива.

Возвращаемое значение

Массив объектов , ConstructorInfo представляющих все конструкторы, определенные для текущего Type объекта , которые соответствуют указанным ограничениям привязки, включая инициализатор типа, если он определен. Возвращает пустой массив типа ConstructorInfo, если для текущего типа Type не определены конструкторы, если ни один из определенных конструкторов не соответствует ограничениям привязки или если текущий тип Type представляет параметр типа в определении универсального типа или метода.

Реализации

Атрибуты

Комментарии

bindingAttr может использоваться для указания того, следует ли возвращать только открытые конструкторы или открытые и не являющиеся открытыми конструкторы.

BindingFlags Следующие флаги фильтра можно использовать для определения конструкторов, которые следует включить в поиск:

  • Укажите BindingFlags.Static вместе с BindingFlags.NonPublic , чтобы получить инициализатор класса (статический конструктор). Вы также можете получить инициализатор класса с помощью TypeInitializer свойства .

  • Укажите BindingFlags.Instance вместе с одним или обоими из BindingFlags.Public и BindingFlags.NonPublic , чтобы получить конструкторы экземпляров.

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

В .NET 6 и более ранних версиях GetConstructors метод не возвращает конструкторы в определенном порядке, например в порядке объявления. Код не должен зависеть от порядка, в котором возвращаются конструкторы, так как этот порядок отличается. Однако, начиная с .NET 7, порядок детерминирован на основе порядка метаданных в сборке.

Если текущий Type представляет сконструированный универсальный тип, этот метод возвращает ConstructorInfo объекты с параметрами типа, замененными соответствующими аргументами типа. Например, если класс C<T> имеет конструктор C(T t1) (Sub New(ByVal t1 As T) в Visual Basic), вызов C<int>GetConstructors метода возвращает ConstructorInfo объект , представляющий C(int t1) в C# (Sub New(ByVal t1 As Integer) в Visual Basic).

Если текущий Type объект представляет параметр универсального GetConstructors типа, метод возвращает пустой массив.

См. также раздел

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

.NET 9 и другие версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1