Type.GetConstructors Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar konstruktorerna för den aktuella Type.
Överlagringar
| Name | Description |
|---|---|
| GetConstructors() |
Returnerar alla offentliga konstruktorer som definierats för den aktuella Type. |
| GetConstructors(BindingFlags) |
När åsidosättas i en härledd klass söker efter konstruktorerna som definierats för den aktuella Type, med hjälp av den angivna |
Exempel
Det här exemplet visar utdata från överbelastningen GetConstructors() från en klass som har två instanskonstruktorer och en statisk konstruktor.
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
Kodens utdata är:
2
False
False
Eftersom överlagringen GetConstructors endast Public använder och Instanceräknas den statiska konstruktorn varken av for uttrycket eller utvärderas av IsStatic.
Om du vill hitta statiska konstruktorer använder du överlagringen GetConstructors och skickar den kombinationen (logisk OR) av BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, enligt följande kodexempel:
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
Nu är utdata:
3
False
True
False
GetConstructors()
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
Returnerar alla offentliga konstruktorer som definierats för den aktuella 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()
Returer
En matris med ConstructorInfo objekt som representerar alla offentliga instanskonstruktorer som definierats för den aktuella Type, men som inte inkluderar typinitieraren (statisk konstruktor). Om inga offentliga instanskonstruktorer har definierats för den aktuella Type, eller om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod, returneras en tom matris av typen ConstructorInfo .
Implementeringar
- Attribut
Kommentarer
I .NET 6 och tidigare versioner returnerar metoden GetConstructors inte konstruktorer i en viss ordning, till exempel deklarationsordning. Koden får inte vara beroende av i vilken ordning konstruktorerna returneras, eftersom ordningen varierar. Från och med .NET 7 är ordningen deterministisk baserat på metadataordningen i sammansättningen.
I följande tabell visas vilka medlemmar i en basklass som returneras av metoderna när de Get reflekterar över en typ.
| Medlemstyp | Static | Icke-statisk |
|---|---|---|
| Constructor | No | No |
| Fält | No | Yes. Ett fält är alltid dolt genom namn och signatur (hide-by-name-and-signature). |
| Händelse | Ej tillämpligt | Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan. |
| Metod | No | Yes. En metod (både virtuell och icke-virtuell) kan vara hide-by-name eller hide-by-name-and-signature. |
| Kapslad typ | No | No |
| Fastighet | Ej tillämpligt | Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan. |
Dölj efter namn och signatur tar hänsyn till alla delar av signaturen, inklusive anpassade modifierare, returtyper, parametertyper, sentinels och ohanterade anropskonventioner. Det här är en binär jämförelse.
För reflektion är egenskaper och händelser dolda genom namn och signatur. Om du har en egenskap med både en get- och en set-accessor i basklassen, men den härledda klassen bara har en get-accessor, döljer egenskapen i den härledda klassen basklassegenskapen och du kommer inte att kunna komma åt set-accessorn i basklassen.
Anpassade attribut ingår inte i det vanliga typsystemet.
Den här metoden överbelastar metoden GetConstructors(BindingFlags) med BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance i Visual Basic). Den hittar inte klassinitierare (statisk konstruktor). Om du vill hitta klassinitierare använder du en överlagring som tar BindingFlags och anger BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic i Visual Basic). Du kan också hämta klassinitieraren med hjälp av TypeInitializer egenskapen .
Om strömmen Type representerar en konstruerad allmän typ returnerar den här metoden objekten ConstructorInfo med typparametrarna ersatta av lämpliga typargument. Till exempel om klassen C<T> har en konstruktor C(T t1) (Sub New(ByVal t1 As T) i Visual Basic), anropar GetConstructors på C<int> returnerar en ConstructorInfo som representerar C(int t1) i C# (Sub New(ByVal t1 As Integer) i Visual Basic).
Om strömmen Type representerar en allmän typparameter GetConstructors returnerar metoden en tom matris.
Se även
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Gäller för
GetConstructors(BindingFlags)
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
När åsidosättas i en härledd klass söker efter konstruktorerna som definierats för den aktuella Type, med hjälp av den angivna 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()
Parametrar
- bindingAttr
- BindingFlags
En bitvis kombination av uppräkningsvärdena som anger hur sökningen ska utföras.
-eller-
Default för att returnera en tom matris.
Returer
En matris med ConstructorInfo objekt som representerar alla konstruktorer som definierats för den aktuella Type som matchar de angivna bindningsbegränsningarna, inklusive typinitieraren om den definieras. Returnerar en tom matris av typen ConstructorInfo om inga konstruktorer har definierats för den aktuella Type, om ingen av de definierade konstruktorerna matchar bindningsbegränsningarna, eller om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod.
Implementeringar
- Attribut
Kommentarer
bindingAttr kan användas för att ange om endast offentliga konstruktorer eller både offentliga och icke-offentliga konstruktorer ska returneras.
Följande BindingFlags filterflaggor kan användas för att definiera vilka konstruktorer som ska ingå i sökningen:
Ange
BindingFlags.Statictillsammans medBindingFlags.NonPublicför att hämta klassinitieraren (statisk konstruktor). Du kan också hämta klassinitieraren med hjälp av TypeInitializer egenskapen .Ange
BindingFlags.Instancetillsammans med en eller båda avBindingFlags.PublicochBindingFlags.NonPublicför att hämta instanskonstruktorer.
Mer information finns i System.Reflection.BindingFlags.
I .NET 6 och tidigare versioner returnerar metoden GetConstructors inte konstruktorer i en viss ordning, till exempel deklarationsordning. Koden får inte vara beroende av i vilken ordning konstruktorerna returneras, eftersom ordningen varierar. Från och med .NET 7 är ordningen deterministisk baserat på metadataordningen i sammansättningen.
Om strömmen Type representerar en konstruerad allmän typ returnerar den här metoden objekten ConstructorInfo med typparametrarna ersatta av lämpliga typargument. Till exempel om klassen C<T> har en konstruktor C(T t1) (Sub New(ByVal t1 As T) i Visual Basic), anropar GetConstructors på C<int> returnerar en ConstructorInfo som representerar C(int t1) i C# (Sub New(ByVal t1 As Integer) i Visual Basic).
Om strömmen Type representerar en allmän typparameter GetConstructors returnerar metoden en tom matris.
Se även
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])