Type.GetConstructors Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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 |
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. |
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.
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.
Atribut kustom bukan bagian dari sistem jenis umum.
Metode ini kelebihan beban memanggil GetConstructors(BindingFlags) metode kelebihan beban, dengan BindingFlags.PublicBindingFlags.Instance | (BindingFlags.PublicOr
BindingFlags.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.StaticOr
BindingFlags.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
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
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 denganBindingFlags.NonPublic
untuk mengambil penginisialisasi kelas (konstruktor statis). Anda juga bisa mendapatkan penginisialisasi kelas menggunakan TypeInitializer properti .Tentukan
BindingFlags.Instance
bersama dengan satu atau kedua danBindingFlags.NonPublic
BindingFlags.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
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])