Type.GetConstructors Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает конструкторы текущего Typeобъекта.
Перегрузки
| Имя | Описание |
|---|---|
| GetConstructors() |
Возвращает все открытые конструкторы, определенные для текущего Type. |
| GetConstructors(BindingFlags) |
При переопределении в производном классе выполняет поиск конструкторов, определенных для текущего Type, с помощью указанного |
Примеры
В этом примере показаны выходные данные перегрузки 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);
}
}
}
type t() =
static do ()
new(i: int) = t ()
let p = typeof<t>.GetConstructors()
printfn $"{p.Length}"
for c in p do
printfn $"{c.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
Выходные данные этого кода:
2
False
False
Так как перегрузка использует только Public и, статический GetConstructors конструктор не учитывается for выражением и не оцениваетсяIsStaticInstance.
Чтобы найти статические конструкторы, используйте перегрузку GetConstructors и передайте его сочетание (логический ИЛИ) BindingFlags.Public, BindingFlags.Static, BindingFlags.InstanceBindingFlags.NonPublicкак показано в следующем примере кода:
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);
}
}
}
open System.Reflection
type t() =
static do ()
new (i: int) = t ()
let p = typeof<t>.GetConstructors(BindingFlags.Public ||| BindingFlags.Static ||| BindingFlags.NonPublic ||| BindingFlags.Instance)
printfn $"{p.Length}"
for c in p do
printfn $"{c.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
Теперь выходные данные:
3
False
True
False
GetConstructors()
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
Возвращает все открытые конструкторы, определенные для текущего Type.
public:
cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
public System.Reflection.ConstructorInfo[] GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)>]
member this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
member this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
abstract member GetConstructors : unit -> System.Reflection.ConstructorInfo[]
override this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member GetConstructors : unit -> System.Reflection.ConstructorInfo[]
override this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
Public Function GetConstructors () As ConstructorInfo()
Возвращаемое значение
Массив объектов, представляющих все конструкторы общедоступных ConstructorInfo экземпляров, определенные для текущего Type, но не включая инициализатор типов (статический конструктор). Если для текущего Typeконструктора общедоступных экземпляров не определены или Type текущий представляет параметр типа в определении универсального типа или универсального метода, возвращается пустой массив типа ConstructorInfo .
Реализации
- Атрибуты
Комментарии
В .NET 6 и более ранних версиях GetConstructors метод не возвращает конструкторы в определенном порядке, например порядок объявления. Код не должен зависеть от порядка возврата конструкторов, так как этот порядок зависит. Однако начиная с .NET 7 порядок детерминирован на основе упорядочения метаданных в сборке.
В следующей таблице показано, какие элементы базового класса возвращаются Get методами при отражении типа.
| Тип участника | Статический | Нестатическое |
|---|---|---|
| Конструктор | Нет | Нет |
| Поле | Нет | Да. Поле всегда скрывается по имени и подписи. |
| Event | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
| Метод | Нет | Да. Метод (виртуальный и не виртуальный) может быть скрыт по имени или как по имени, так и по подписи. |
| Вложенный тип | Нет | Нет |
| Недвижимость | Неприменимо | Правило системы общего типа заключается в том, что наследование следует тем же правилам, что и методы, реализующие свойство. Отражение обрабатывает свойства как скрытие по имени и сигнатуре. См. примечание 2 ниже. |
Скрытие по имени и сигнатуре учитывает все части подписи, включая настраиваемые модификаторы, возвращаемые типы, типы параметров, sentinels и неуправляемые соглашения о вызовах. Это двоичное сравнение.
Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методами get и set в базовом классе, но производный класс имеет только метод get, свойство производного класса перекрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.
Пользовательские атрибуты не являются частью общей системы типов.
Эта перегрузка метода вызывает перегрузку GetConstructors(BindingFlags) метода ( BindingFlags.PublicBindingFlags.Instance | BindingFlags.InstanceBindingFlags.PublicOrв 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), вызов GetConstructorsC<int> возвращает возвращаемое ConstructorInfoC(int t1) значение в C# (Sub New(ByVal t1 As Integer) в Visual Basic).
Если текущий Type представляет параметр универсального типа, GetConstructors метод возвращает пустой массив.
См. также раздел
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Применяется к
GetConstructors(BindingFlags)
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
- Исходный код:
- Type.cs
При переопределении в производном классе выполняет поиск конструкторов, определенных для текущего Type, с помощью указанного BindingFlags.
public:
abstract cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
public abstract System.Reflection.ConstructorInfo[] GetConstructors(System.Reflection.BindingFlags bindingAttr);
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);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)>]
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
Public MustOverride Function GetConstructors (bindingAttr As BindingFlags) As ConstructorInfo()
Параметры
- bindingAttr
- BindingFlags
Побитовое сочетание значений перечисления, указывающее, как выполняется поиск.
–или–
Default для возврата пустого массива.
Возвращаемое значение
Массив ConstructorInfo объектов, представляющих все конструкторы, определенные для текущего Type , соответствующего указанным ограничениям привязки, включая инициализатор типов, если он определен. Возвращает пустой массив типа ConstructorInfo , если конструкторы не определены для текущего Type, если ни один из определенных конструкторов не соответствует ограничениям привязки, или если текущий Type представляет параметр типа в определении универсального типа или универсального метода.
Реализации
- Атрибуты
Комментарии
bindingAttr можно использовать для указания того, следует ли возвращать только открытые конструкторы или как общедоступные, так и недоступные конструкторы.
BindingFlags Следующие флаги фильтров можно использовать для определения конструкторов, которые необходимо включить в поиск:
Укажите
BindingFlags.Staticвместе сBindingFlags.NonPublicполучением инициализатора класса (статический конструктор). Вы также можете получить инициализатор класса с помощью TypeInitializer свойства.Укажите
BindingFlags.Instanceвместе с одним или обоимиBindingFlags.NonPublicBindingFlags.Publicконструкторами экземпляров.
См. System.Reflection.BindingFlags для получения дополнительной информации.
В .NET 6 и более ранних версиях GetConstructors метод не возвращает конструкторы в определенном порядке, например порядок объявления. Код не должен зависеть от порядка возврата конструкторов, так как этот порядок зависит. Однако начиная с .NET 7 порядок детерминирован на основе упорядочения метаданных в сборке.
Если текущий Type представляет созданный универсальный тип, этот метод возвращает ConstructorInfo объекты с параметрами типа, замененными соответствующими аргументами типа. Например, если класс C<T> имеет конструктор C(T t1) (Sub New(ByVal t1 As T) в Visual Basic), вызов GetConstructorsC<int> возвращает возвращаемое ConstructorInfoC(int t1) значение в C# (Sub New(ByVal t1 As Integer) в Visual Basic).
Если текущий Type представляет параметр универсального типа, GetConstructors метод возвращает пустой массив.
См. также раздел
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])