Type.GetConstructors 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得目前 Type 的建構函式。
多載
GetConstructors() |
傳回所有定義給目前 Type 的公用建構函式。 |
GetConstructors(BindingFlags) |
在衍生類別中覆寫時,使用指定的 Type,搜尋定義給目前 |
範例
這個範例 GetConstructors() 會顯示具有兩個實例的函式和一個靜態的函式之類別的多載輸出。
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);
}
}
}
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
此程式碼的輸出為:
2
False
False
因為多載 GetConstructors 只 Public 會使用和,所以靜態的函式 Instance 不會由運算式計算,也不會 for
由評估 IsStatic
。
若要尋找靜態的函式,請使用多載 GetConstructors ,並將、、 (的邏輯 OR) 的組合傳遞給它, BindingFlags.Public BindingFlags.Static BindingFlags.NonPublic BindingFlags.Instance 如下列程式碼範例所示:
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);
}
}
}
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
輸出現在是:
3
False
True
False
GetConstructors()
傳回所有定義給目前 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()
傳回
由 ConstructorInfo 物件組成的陣列,表示定義給目前 Type 的所有公用執行個體建構函式,但不含類型初始設定式 (靜態建構函式)。 如果目前的 Type 沒有定義任何公用執行個體建構函式,或目前的 Type 表示泛型類型或泛型方法定義中的類型參數,則會傳回 ConstructorInfo 類型的空陣列。
實作
- 屬性
備註
方法不會傳回特定順序的函式 GetConstructors ,例如宣告順序。 您的程式碼不得相依于傳回的函式順序,因為該順序會有所不同。
下表顯示在反映型別時,方法會傳回基類的成員 Get
。
成員類型 | Static | 非靜態 |
---|---|---|
建構函式 | 否 | 否 |
欄位 | 否 | 可以。 欄位一律會依名稱和簽章進行隱藏。 |
事件 | 不適用 | 一般類型系統規則是,繼承與實作為屬性的方法相同。 反映會將屬性視為隱藏名稱和簽章。 請參閱下面的附注2。 |
方法 | 否 | 可以。 (虛擬和非虛擬) 的方法都可以依名稱或依名稱、依名稱和簽章來隱藏。 |
巢狀型別 | 否 | 否 |
屬性 | 不適用 | 一般類型系統規則是,繼承與實作為屬性的方法相同。 反映會將屬性視為隱藏名稱和簽章。 請參閱下面的附注2。 |
依名稱和簽章會考慮簽章的所有部分,包括自訂修飾詞、傳回類型、參數類型、個 sentinel 和非受控呼叫慣例。 這是二進位比較。
針對反映,屬性和事件會依名稱和簽章來隱藏。 如果您的屬性同時具有基類中的 get 和 set 存取子,但衍生類別只有 get 存取子,則衍生類別屬性會隱藏基類屬性,而且您將無法存取基類的 setter。
自訂屬性不是一般型別系統的一部分。
這個方法多載會 GetConstructors(BindingFlags) 使用 BindingFlags.Public BindingFlags.Instance BindingFlags.Public Or
BindingFlags.Instance Visual Basic) 中的 | (,來呼叫方法多載。 它不會 (靜態的函式) 找到類別初始化運算式。 若要尋找類別初始化運算式,請使用採用的多載, BindingFlags 並指定 BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or
BindingFlags.NonPublic Visual Basic) 中 | (。 您也可以使用屬性取得類別初始化運算式 TypeInitializer 。
如果目前的 Type 代表結構化泛型型別,這個方法會傳回 ConstructorInfo 類型參數取代為適當類型引數的物件。 例如,如果類別 C<T>
C(T t1)
在 Visual Basic) 中有一個 (的函式,則在中 Sub New(ByVal t1 As T)
呼叫 GetConstructors 會傳回 C<int>
ConstructorInfo 代表 C(int t1)
Visual Basic) 中 c # (的 Sub New(ByVal t1 As Integer)
。
如果目前的 Type 表示泛型型別參數,則方法會傳回 GetConstructors 空陣列。
另請參閱
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
適用於
GetConstructors(BindingFlags)
在衍生類別中覆寫時,使用指定的 Type,搜尋定義給目前 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()
參數
傳回
ConstructorInfo 物件的陣列,代表為目前 Type 定義之符合指定繫結條件約束的所有建構函式,包括類型初始設定式 (如果已定義)。 如果目前的 ConstructorInfo 沒有定義建構函式,或所定義的建構函式都不符合繫結條件約束,或目前的 Type 表示泛型類型或泛型方法定義中的類型參數,則傳回 Type 類型的空陣列。
實作
- 屬性
備註
bindingAttr
可以用來指定是否只傳回公用的函式,或是公用和非公用的函式。
下列 BindingFlags 篩選旗標可以用來定義要包含在搜尋中的哪些函式:
指定
BindingFlags.Static
和BindingFlags.NonPublic
,以取得 (靜態函式) 的類別初始化運算式。 您也可以使用屬性取得類別初始化運算式 TypeInitializer 。同時指定
BindingFlags.Instance
和的一或兩個BindingFlags.Public
,BindingFlags.NonPublic
以取出實例的函式。
如需相關資訊,請參閱 System.Reflection.BindingFlags 。
方法不會傳回特定順序的函式 GetConstructors ,例如宣告順序。 您的程式碼不得相依于傳回的函式順序,因為該順序會有所不同。
如果目前的 Type 代表結構化泛型型別,這個方法會傳回 ConstructorInfo 類型參數取代為適當類型引數的物件。 例如,如果類別 C<T>
C(T t1)
在 Visual Basic) 中有一個 (的函式,則在中 Sub New(ByVal t1 As T)
呼叫 GetConstructors 會傳回 C<int>
ConstructorInfo 代表 C(int t1)
Visual Basic) 中 c # (的 Sub New(ByVal t1 As Integer)
。
如果目前的 Type 表示泛型型別參數,則方法會傳回 GetConstructors 空陣列。
另請參閱
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])