Bagikan melalui


Type.GetConstructors Metode

Definisi

Mendapatkan konstruktor dari saat ini Type.

Overload

GetConstructors()

Mengembalikan semua konstruktor publik yang ditentukan untuk saat ini Type.

GetConstructors(BindingFlags)

Ketika ditimpa di kelas turunan, cari konstruktor yang ditentukan untuk saat ini Type, menggunakan yang ditentukan BindingFlags.

Contoh

Contoh ini menunjukkan output GetConstructors() kelebihan beban dari kelas yang memiliki dua konstruktor instans dan satu konstruktor statis.

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

Output dari kode ini adalah:

2
False
False

GetConstructors Karena kelebihan beban hanya Public menggunakan dan Instance, konstruktor statis tidak dihitung oleh for ekspresi atau dievaluasi oleh IsStatic.

Untuk menemukan konstruktor statis, gunakan GetConstructors kelebihan beban, dan berikan kombinasi (LOGICAL OR) dari BindingFlags.Public, , BindingFlags.StaticBindingFlags.NonPublic, BindingFlags.Instance, seperti yang ditunjukkan dalam contoh kode berikut:

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

Sekarang outputnya adalah:

3
False
True
False

GetConstructors()

Sumber:
Type.cs
Sumber:
Type.cs
Sumber:
Type.cs

Mengembalikan semua konstruktor publik yang ditentukan untuk saat ini Type.

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

Mengembalikan

Array ConstructorInfo objek yang mewakili semua konstruktor instans publik yang ditentukan untuk saat ini Type, tetapi tidak termasuk penginisialisasi jenis (konstruktor statis). Jika tidak ada konstruktor instans publik yang didefinisikan untuk saat ini Type, atau jika saat ini Type mewakili parameter jenis dalam definisi jenis generik atau metode generik, array jenis ConstructorInfo kosong dikembalikan.

Penerapan

Atribut

Keterangan

Dalam .NET 6 dan versi yang lebih lama, GetConstructors metode ini tidak mengembalikan konstruktor dalam urutan tertentu, seperti urutan deklarasi. Kode Anda tidak boleh bergantung pada urutan di mana konstruktor dikembalikan, karena urutan tersebut bervariasi. Namun, dimulai dengan .NET 7, pemesanan bersifat deterministik berdasarkan urutan metadata dalam perakitan.

Tabel berikut menunjukkan anggota kelas dasar apa yang dikembalikan oleh Get metode saat mencerminkan jenis.

Jenis anggota Statis Non-Statis
Konstruktor Tidak Tidak
Bidang Tidak Ya. Bidang selalu disembunyikan menurut nama dan tanda tangan.
Kejadian Tidak berlaku Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini.
Metode Tidak Ya. Metode (virtual dan non-virtual) dapat berupa hide-by-name atau hide-by-name-and-signature.
Tipe Berlapis Tidak Tidak
Properti Tidak berlaku Aturan sistem jenis umum adalah bahwa pewarisan sama dengan metode yang mengimplementasikan properti . Pantulan memperlakukan properti sebagai hide-by-name-and-signature. Lihat catatan 2 di bawah ini.
  1. Hide-by-name-and-signature mempertimbangkan semua bagian tanda tangan, termasuk pengubah kustom, jenis pengembalian, jenis parameter, sentinel, dan konvensi panggilan yang tidak dikelola. Ini adalah perbandingan biner.

  2. Untuk refleksi, properti dan peristiwa adalah hide-by-name-and-signature. Jika Anda memiliki properti dengan aksesor get dan set di kelas dasar, tetapi kelas turunan hanya memiliki aksesor get, properti kelas turunan menyembunyikan properti kelas dasar, dan Anda tidak akan dapat mengakses setter pada kelas dasar.

  3. Atribut kustom bukan bagian dari sistem jenis umum.

Metode ini kelebihan beban memanggil GetConstructors(BindingFlags) metode kelebihan beban, dengan BindingFlags.PublicBindingFlags.Instance | (BindingFlags.PublicOrBindingFlags.Instance di Visual Basic). Ini tidak akan menemukan penginisialisasi kelas (konstruktor statis). Untuk menemukan penginisialisasi kelas, gunakan kelebihan beban yang mengambil BindingFlags, dan menentukan | BindingFlags.NonPublicBindingFlags.Static(BindingFlags.StaticOrBindingFlags.NonPublic di Visual Basic). Anda juga bisa mendapatkan penginisialisasi kelas menggunakan TypeInitializer properti .

Jika saat ini Type mewakili jenis generik yang dibangun, metode ini mengembalikan ConstructorInfo objek dengan parameter jenis yang digantikan oleh argumen jenis yang sesuai. Misalnya, jika kelas C<T> memiliki konstruktor C(T t1) (Sub New(ByVal t1 As T) di Visual Basic), memanggil GetConstructorsC<int> mengembalikan ConstructorInfo yang mewakili C(int t1) dalam C# (Sub New(ByVal t1 As Integer) di Visual Basic).

Jika saat ini Type mewakili parameter jenis generik, GetConstructors metode mengembalikan array kosong.

Lihat juga

Berlaku untuk

GetConstructors(BindingFlags)

Sumber:
Type.cs
Sumber:
Type.cs
Sumber:
Type.cs

Ketika ditimpa di kelas turunan, cari konstruktor yang ditentukan untuk saat ini Type, menggunakan yang ditentukan BindingFlags.

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

Parameter

bindingAttr
BindingFlags

Kombinasi bitwise dari nilai enumerasi yang menentukan bagaimana pencarian dilakukan.

-atau-

Default untuk mengembalikan array kosong.

Mengembalikan

Array ConstructorInfo objek yang mewakili semua konstruktor yang ditentukan untuk saat ini Type yang cocok dengan batasan pengikatan yang ditentukan, termasuk penginisialisasi jenis jika ditentukan. Mengembalikan array kosong jenis ConstructorInfo jika tidak ada konstruktor yang ditentukan untuk saat ini Type, jika tidak ada konstruktor yang ditentukan yang cocok dengan batasan pengikatan, atau jika saat ini Type mewakili parameter jenis dalam definisi jenis generik atau metode generik.

Penerapan

Atribut

Keterangan

bindingAttr dapat digunakan untuk menentukan apakah hanya mengembalikan konstruktor publik atau konstruktor publik dan non-publik.

Bendera filter berikut BindingFlags dapat digunakan untuk menentukan konstruktor mana yang akan disertakan dalam pencarian:

  • Tentukan BindingFlags.Static bersama dengan BindingFlags.NonPublic untuk mengambil penginisialisasi kelas (konstruktor statis). Anda juga bisa mendapatkan penginisialisasi kelas menggunakan TypeInitializer properti .

  • Tentukan BindingFlags.Instance bersama dengan satu atau kedua dan BindingFlags.NonPublicBindingFlags.Public untuk mengambil konstruktor instans.

Lihat System.Reflection.BindingFlags untuk informasi lebih lanjut.

Dalam .NET 6 dan versi yang lebih lama, GetConstructors metode ini tidak mengembalikan konstruktor dalam urutan tertentu, seperti urutan deklarasi. Kode Anda tidak boleh bergantung pada urutan di mana konstruktor dikembalikan, karena urutan tersebut bervariasi. Namun, dimulai dengan .NET 7, pemesanan bersifat deterministik berdasarkan urutan metadata dalam perakitan.

Jika saat ini Type mewakili jenis generik yang dibangun, metode ini mengembalikan ConstructorInfo objek dengan parameter jenis yang digantikan oleh argumen jenis yang sesuai. Misalnya, jika kelas C<T> memiliki konstruktor C(T t1) (Sub New(ByVal t1 As T) di Visual Basic), memanggil GetConstructorsC<int> mengembalikan ConstructorInfo yang mewakili C(int t1) dalam C# (Sub New(ByVal t1 As Integer) di Visual Basic).

Jika saat ini Type mewakili parameter jenis generik, GetConstructors metode mengembalikan array kosong.

Lihat juga

Berlaku untuk