Type.GetConstructors Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene los constructores del objeto Type actual.
Sobrecargas
GetConstructors() |
Devuelve todos los constructores públicos definidos para el objeto Type actual. |
GetConstructors(BindingFlags) |
Cuando se invalida en una clase derivada, busca los constructores definidos para el objeto Type actual, con las enumeraciones |
Ejemplos
En este ejemplo se muestra la salida de la GetConstructors() sobrecarga de una clase que tiene dos constructores de instancia y un constructor estático.
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);
}
}
}
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
El resultado del código es el siguiente:
2
False
False
Dado que la GetConstructors sobrecarga usa solo Public y Instance, el constructor estático no se cuenta por la for
expresión ni se evalúa por IsStatic
.
Para buscar constructores estáticos, use la GetConstructors sobrecarga y pásela la combinación (OR lógico) de BindingFlags.Public, BindingFlags.NonPublicBindingFlags.Static, , BindingFlags.Instancecomo se muestra en el ejemplo de código siguiente:
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);
}
}
}
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
Ahora la salida es:
3
False
True
False
GetConstructors()
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
Devuelve todos los constructores públicos definidos para el objeto Type actual.
public:
cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors ();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors ();
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()
Devoluciones
Matriz de objetos ConstructorInfo que representan todos los constructores de instancias públicos definidos para el objeto Type actual, pero sin incluir el inicializador de tipo (constructor estático). Si no se han definido constructores de instancia públicos para el objeto Type actual o si el objeto Type actual representa un parámetro de tipo en la definición de un tipo genérico o de un método genérico, se devuelve una matriz vacía de tipo ConstructorInfo.
Implementaciones
- Atributos
Comentarios
En .NET 6 y versiones anteriores, el GetConstructors método no devuelve constructores en un orden determinado, como el orden de declaración. El código no debe depender del orden en el que se devuelven los constructores, ya que ese orden varía. Sin embargo, a partir de .NET 7, el orden es determinista en función del orden de metadatos del ensamblado.
En la tabla siguiente se muestra qué miembros de una clase base devuelven los Get
métodos al reflejar en un tipo.
Tipo de miembro | Estático | No estático |
---|---|---|
Constructor | No | No |
Campo | No | Sí. Un campo siempre se oculta por nombre y firma. |
evento | No es aplicable | La regla del sistema de tipos común es que la herencia es la misma que la de los métodos que implementan la propiedad . La reflexión trata las propiedades como hide-by-name-and-signature. Consulte la nota 2 a continuación. |
Método | No | Sí. Un método (tanto virtual como no virtual) puede ser hide-by-name u hide-by-name-and-signature. |
Tipo anidado | No | No |
Propiedad. | No es aplicable | La regla del sistema de tipos común es que la herencia es la misma que la de los métodos que implementan la propiedad . La reflexión trata las propiedades como hide-by-name-and-signature. Consulte la nota 2 a continuación. |
Hide-by-name-and-signature tiene en cuenta todas las partes de la firma, incluidos modificadores personalizados, tipos de valor devuelto, tipos de parámetros, sentinels y convenciones de llamada no administradas. Se trata de una comparación binaria.
Para la reflexión, las propiedades y los eventos son hide-by-name-and-signature. Si tiene una propiedad con un descriptor de acceso get y un set en la clase base, pero la clase derivada solo tiene un descriptor de acceso get, la propiedad de clase derivada oculta la propiedad de clase base y no podrá tener acceso al establecedor en la clase base.
Los atributos personalizados no forman parte del sistema de tipos común.
Esta sobrecarga de método llama a la sobrecarga del GetConstructors(BindingFlags) método , con | BindingFlags.InstanceBindingFlags.Public(BindingFlags.PublicOr
BindingFlags.Instance en Visual Basic). No encontrará inicializadores de clase (constructor estático). Para buscar inicializadores de clase, use una sobrecarga que tome BindingFlagsy especifique BindingFlags.StaticBindingFlags.NonPublic | (BindingFlags.StaticOr
BindingFlags.NonPublic en Visual Basic). También puede obtener el inicializador de clase mediante la TypeInitializer propiedad .
Si el objeto actual Type representa un tipo genérico construido, este método devuelve los objetos con los ConstructorInfo parámetros de tipo reemplazados por los argumentos de tipo adecuados. Por ejemplo, si la clase C<T>
tiene un constructor C(T t1)
(Sub New(ByVal t1 As T)
en Visual Basic), al llamar a GetConstructors en C<int>
devuelve un ConstructorInfo objeto que representa C(int t1)
en C# (Sub New(ByVal t1 As Integer)
en Visual Basic).
Si el objeto actual Type representa un parámetro de tipo genérico, el GetConstructors método devuelve una matriz vacía.
Consulte también
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Se aplica a
GetConstructors(BindingFlags)
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
Cuando se invalida en una clase derivada, busca los constructores definidos para el objeto Type actual, con las enumeraciones BindingFlags
especificadas.
public:
abstract cli::array <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);
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()
Parámetros
- bindingAttr
- BindingFlags
Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda.
O bien
Default para que se devuelva una matriz vacía.
Devoluciones
Matriz de ConstructorInfo objetos que representan todos los constructores definidos para el actual Type que coinciden con las restricciones de enlace especificadas, incluido el inicializador de tipo si se define. Devuelve una matriz vacía de tipo ConstructorInfo si no se definen constructores para el objeto Type actual, si ninguno de los constructores definidos cumple las restricciones de enlace o si el objeto Type actual representa un parámetro de tipo en la definición de un tipo genérico o de un método genérico.
Implementaciones
- Atributos
Comentarios
bindingAttr
se puede usar para especificar si solo se devuelven constructores públicos o constructores públicos y no públicos.
Se pueden usar las marcas de filtro siguientes BindingFlags para definir qué constructores se van a incluir en la búsqueda:
Especifique
BindingFlags.Static
junto conBindingFlags.NonPublic
para recuperar el inicializador de clase (constructor estático). También puede obtener el inicializador de clase mediante la TypeInitializer propiedad .Especifique
BindingFlags.Instance
junto con uno o ambos de yBindingFlags.NonPublic
para recuperar constructores deBindingFlags.Public
instancia.
Vea System.Reflection.BindingFlags para obtener más información.
En .NET 6 y versiones anteriores, el GetConstructors método no devuelve constructores en un orden determinado, como el orden de declaración. El código no debe depender del orden en el que se devuelven los constructores, ya que ese orden varía. Sin embargo, a partir de .NET 7, el orden es determinista en función del orden de metadatos del ensamblado.
Si el objeto actual Type representa un tipo genérico construido, este método devuelve los objetos con los ConstructorInfo parámetros de tipo reemplazados por los argumentos de tipo adecuados. Por ejemplo, si la clase C<T>
tiene un constructor C(T t1)
(Sub New(ByVal t1 As T)
en Visual Basic), al llamar a GetConstructors en C<int>
devuelve un ConstructorInfo objeto que representa C(int t1)
en C# (Sub New(ByVal t1 As Integer)
en Visual Basic).
Si el objeto actual Type representa un parámetro de tipo genérico, el GetConstructors método devuelve una matriz vacía.
Consulte también
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])