Type.GetConstructors Yöntem

Tanım

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

Aşırı Yüklemeler

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 BindingFlagsöğesini kullanarak geçerli Typeiçin tanımlanan oluşturucuları arar.

Örnekler

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

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

Bu kodun çıktısı şöyledir:

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.NonPublic, , BindingFlags.Instancebirleşimini (mantıksal OR) BindingFlags.Publicgeçirin:

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

Şimdi çıkış:

3
False
True
False

GetConstructors()

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

Döndürülenler

Geçerli Typeiçin tanımlanan ancak tür başlatıcısı (statik oluşturucu) dahil olmayan 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ün veya genel yöntemin 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ümlerde 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. Ancak.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 Get döndürülen temel sınıfın üyeleri gösterilmektedir.

Üye Türü Statik Statik Olmayan
Oluşturucu Hayır Hayır
Alan Hayır Evet. Bir alan her zaman "ada ve imzaya göre gizle" özelliğindedir.
Olay Uygulanamaz Ortak tür sistemi kuralı, devralma işleminin özelliği uygulayan yöntemlerinkiyle aynı olmasıdır. Yansıma, özellikleri "ada ve imzaya göre gizle" şeklinde kullanır. Aşağıdaki 2. nota bakın.
Yöntem Hayır Evet. Bir yöntem (sanal ve sanal olmayan) "ada göre gizle" veya "ada ve imzaya göre gizle" özelliğinde olabilir.
İç İçe Tür Hayır Hayır
Özellik Uygulanamaz Ortak tür sistemi kuralı, devralma işleminin özelliği uygulayan yöntemlerinkiyle aynı olmasıdır. Yansıma, özellikleri "ada ve imzaya göre gizle" şeklinde kullanır. Aşağıdaki 2. nota bakın.
  1. "Ada ve imzaya göre gizle" özelliği, imzanın tüm parçalarını (özel değiştiriciler, dönüş türleri, parametre türleri, başlangıç/bitiş simgeleri ve yönetilmeyen çağrı kuralları dahil) dikkate alır. Bu ikili bir karşılaştırmadır.

  2. Yansıma için, özellikler ve olaylar "ada ve imzaya göre gizle" özelliğindedir. Bu temel sınıfta hem alma hem de ayarlama erişimcisine sahip bir özelliğiniz varsa, ancak türetilen sınıfın yalnızca bir alma erişimcisi varsa, türetilen sınıf özelliği temel sınıf özelliğini gizler ve siz de temel sınıfta ayarlayıcıya erişemezsiniz.

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

Bu yöntem aşırı yüklemesi,BindingFlags.InstanceBindingFlags.Public | ile (BindingFlags.PublicBindingFlags.InstanceOr Visual Basic'te) yöntemi 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 , ve belirten BindingFlags.Static | BindingFlags.NonPublic bir aşırı yükleme BindingFlagskullanın (BindingFlags.StaticOrBindingFlags.NonPublic Visual Basic'te). 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 (C(T t1)Sub New(ByVal t1 As T)Visual Basic'te) varsa, üzerinde C<int> çağrısı GetConstructors C# içinde (Sub New(ByVal t1 As Integer) Visual Basic'te) temsil eden C(int t1) bir ConstructorInfo döndürür.

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

Ayrıca bkz.

Şunlara uygulanır

GetConstructors(BindingFlags)

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

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

Parametreler

bindingAttr
BindingFlags

Aramanın nasıl yürütüleceğini belirten numaralandırma değerlerinin bit düzeyinde birleşimi.

-veya-

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

Döndürülenler

Tanımlanmışsa tür başlatıcısı ConstructorInfo da dahil olmak üzere, belirtilen bağlama kısıtlamalarıyla eşleşen geçerli Type için tanımlanan tüm oluşturucuları temsil eden bir nesne dizisi. Geçerli Typeiçin hiçbir oluşturucu tanımlanmamışsa, 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öntemin tanımında tür parametresini temsil ediyorsa 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 ortak 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.PublicBindingFlags.NonPublic ile birlikte belirtinBindingFlags.Instance.

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

.NET 6 ve önceki sürümlerde 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. Ancak.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 (C(T t1)Sub New(ByVal t1 As T)Visual Basic'te) varsa, üzerinde C<int> çağrısı GetConstructors C# içinde (Sub New(ByVal t1 As Integer) Visual Basic'te) temsil eden C(int t1) bir ConstructorInfo döndürür.

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

Ayrıca bkz.

Şunlara uygulanır