Type.GetConstructors Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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 |
Ö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 IsStatic
değ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()
- 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();
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. |
"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.
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.
Ö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.StaticOr
BindingFlags.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.
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Şunlara uygulanır
GetConstructors(BindingFlags)
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
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.Public
BindingFlags.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.
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])