Aracılığıyla paylaş


Type.GetConstructors Yöntem

Tanım

Geçerli Typeoluşturucularını alır.

Aşırı Yüklemeler

Name Description
GetConstructors()

Geçerli Typeiçin tanımlanan tüm ortak oluşturucuları döndürür.

GetConstructors(BindingFlags)

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen Typeöğesini kullanarak geçerli BindingFlagsiçin tanımlanan oluşturucuları arar.

Örnekler

Bu örnekte, iki örnek oluşturucu ve bir statik oluşturucu içeren bir sınıftan aşırı yüklemenin çıkışı GetConstructors() gösterilmektedir.

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

Bu kodun çıkışı:

2
False
False

GetConstructors Aşırı yükleme yalnızca Public ve Instancekullandığından, statik oluşturucu ne ifade tarafından for sayılır ne de tarafından IsStaticdeğerlendirilir.

Statik oluşturucuları bulmak için aşırı yüklemeyi kullanın GetConstructors ve aşağıdaki kod örneğinde gösterildiği gibi , BindingFlags.Static, BindingFlags.NonPublicBindingFlags.Instance, birleşimini (mantıksal VEYA) BindingFlags.Publicgeçirin:

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

Şimdi çıkış:

3
False
True
False

GetConstructors()

Kaynak:
Type.cs
Kaynak:
Type.cs
Kaynak:
Type.cs
Kaynak:
Type.cs
Kaynak:
Type.cs

Geçerli Typeiçin tanımlanan tüm ortak oluşturucuları döndürür.

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()

Döndürülenler

Türü başlatıcı (statik oluşturucu) dahil değil, geçerli Typeiçin tanımlanan tüm genel örnek oluşturucularını temsil eden bir nesne dizisiConstructorInfo. Geçerli Typeiçin hiçbir genel örnek oluşturucu tanımlanmamışsa veya geçerli Type , genel bir tür veya genel yöntem tanımında bir tür parametresini temsil ederse, boş bir tür ConstructorInfo dizisi döndürülür.

Uygulamalar

Öznitelikler

Açıklamalar

.NET 6 ve önceki sürümlerinde yöntemi, GetConstructors oluşturucuları bildirim sırası gibi belirli bir sırada döndürmez. Kodunuz, oluşturucuların döndürülme sırasına bağlı olmamalıdır, çünkü bu sıra değişir. Bununla birlikte, .NET 7'den başlayarak sıralama, derlemedeki meta veri sıralamasını temel alarak belirleyicidir.

Aşağıdaki tabloda, bir türe yansıtılırken yöntemler tarafından döndürülen temel sınıf üyeleri gösterilmektedir.

Üye Türü Static Statik Olmayan
Yapıcı Hayır Hayır
Alan Hayır Evet. Alan her zaman isim ve imzaya göre gizli olur.
Etkinlik Uygulanamaz Yaygın tür sistemi kuralı, özniteliği uygulayan yöntemlerdeki devralma ile aynıdır. Yansıma, özellikleri ada ve imzaya göre gizle olarak ele alır. Aşağıdaki 2. nota bakın.
Yöntem Hayır Evet. Bir yöntem (hem sanal hem de sanal olmayan) isim odaklı gizleme veya isim ve imza odaklı gizleme olabilir.
İç İçe Yerleştirilmiş Tür Hayır Hayır
Mülkiyet Uygulanamaz Yaygın tür sistemi kuralı, özniteliği uygulayan yöntemlerdeki devralma ile aynıdır. Yansıma, özellikleri ada ve imzaya göre gizle olarak ele alır. Aşağıdaki 2. nota bakın.
  1. Ad ve imzaya göre gizleme, özel değiştiriciler, dönüş türleri, parametre türleri, sentineller ve yönetilmeyen çağırma kuralları dahil olmak üzere, imzanın tüm parçalarını dikkate alır. Bu ikili karşılaştırmadır.

  2. Yansıma için, özellikler ve olaylar ada ve imzaya göre gizlenir. Temel sınıfta hem get hem de set erişimcisine sahip bir özelliğiniz varsa, ancak türetilen sınıfın yalnızca bir get erişimcisi varsa, türetilmiş sınıf özelliği temel sınıf özelliğini gizler ve temel sınıfta ayarlayıcıya erişemezsiniz.

  3. Özel öznitelikler ortak tür sisteminin bir parçası değildir.

Bu yöntem aşırı yüklemesi, (BindingFlags.InstanceOrBindingFlags.Public Visual Basic'te) ile BindingFlags.PublicBindingFlags.Instance | yöntem aşırı yüklemesini çağırır.GetConstructors(BindingFlags) Sınıf başlatıcılarını (statik oluşturucu) bulamaz. Sınıf başlatıcılarını bulmak için, öğesini alan BindingFlagsve ( Visual Basic'te)BindingFlags.StaticBindingFlags.NonPublicOr belirten BindingFlags.Static | BindingFlags.NonPublic bir aşırı yükleme kullanın. Ayrıca özelliğini kullanarak sınıf başlatıcısını TypeInitializer da alabilirsiniz.

Geçerli Type , yapılandırılmış bir genel türü temsil ederse, bu yöntem nesneleri uygun tür bağımsız değişkenleriyle değiştirilen tür parametreleriyle döndürür ConstructorInfo . Örneğin, sınıfın C<T> bir oluşturucu (Sub New(ByVal t1 As T)C(T t1) Visual Basic'te) varsa, üzerinde C<int> çağrısı GetConstructors C# (Sub New(ByVal t1 As Integer) Visual Basic'te) öğesini temsil C(int t1) eden bir ConstructorInfo döndürür.

Geçerli Type bir genel tür parametresini temsil ederse, GetConstructors yöntem boş bir dizi döndürür.

Ayrıca bkz.

Şunlara uygulanır

GetConstructors(BindingFlags)

Kaynak:
Type.cs
Kaynak:
Type.cs
Kaynak:
Type.cs
Kaynak:
Type.cs
Kaynak:
Type.cs

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen Typeöğesini kullanarak geçerli BindingFlagsiçin tanımlanan oluşturucuları arar.

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()

Parametreler

bindingAttr
BindingFlags

Aramanın nasıl yapıldığını belirten numaralandırma değerlerinin bit düzeyinde birleşimi.

-veya-

Default boş bir dizi döndürmek için.

Döndürülenler

Geçerli Type için tanımlanan ve tanımlanmışsa tür başlatıcısı da dahil olmak üzere belirtilen bağlama kısıtlamalarıyla eşleşen tüm oluşturucuları temsil eden bir nesne dizisiConstructorInfo. Geçerli Typeiçin hiçbir oluşturucu tanımlanmadıysa, tanımlı oluşturuculardan hiçbiri bağlama kısıtlamalarıyla eşleşmiyorsa veya geçerliType, genel bir tür veya genel yöntem tanımında tür parametresini temsil ederse boş bir tür dizisi ConstructorInfo döndürür.

Uygulamalar

Öznitelikler

Açıklamalar

bindingAttr yalnızca ortak oluşturucuların mı yoksa hem genel hem de genel olmayan oluşturucuların mı döndürüleceğini belirtmek için kullanılabilir.

Aşağıdaki BindingFlags filtre bayrakları, aramaya eklenecek oluşturucuları tanımlamak için kullanılabilir:

  • Sınıf başlatıcısını (statik oluşturucu) almak için ile BindingFlags.NonPublic birlikte belirtinBindingFlags.Static. Ayrıca özelliğini kullanarak sınıf başlatıcısını TypeInitializer da alabilirsiniz.

  • Örnek oluşturucularını almak için ve BindingFlags.NonPublic öğesinin BindingFlags.Public bir veya her ikisiyle birlikte belirtinBindingFlags.Instance.

Daha fazla bilgi için bkz. System.Reflection.BindingFlags.

.NET 6 ve önceki sürümlerinde yöntemi, GetConstructors oluşturucuları bildirim sırası gibi belirli bir sırada döndürmez. Kodunuz, oluşturucuların döndürülme sırasına bağlı olmamalıdır, çünkü bu sıra değişir. Bununla birlikte, .NET 7'den başlayarak sıralama, derlemedeki meta veri sıralamasını temel alarak belirleyicidir.

Geçerli Type , yapılandırılmış bir genel türü temsil ederse, bu yöntem nesneleri uygun tür bağımsız değişkenleriyle değiştirilen tür parametreleriyle döndürür ConstructorInfo . Örneğin, sınıfın C<T> bir oluşturucu (Sub New(ByVal t1 As T)C(T t1) Visual Basic'te) varsa, üzerinde C<int> çağrısı GetConstructors C# (Sub New(ByVal t1 As Integer) Visual Basic'te) öğesini temsil C(int t1) eden bir ConstructorInfo döndürür.

Geçerli Type bir genel tür parametresini temsil ederse, GetConstructors yöntem boş bir dizi döndürür.

Ayrıca bkz.

Şunlara uygulanır