Type.GetConstructors 方法

定義

取得目前 Type 的建構函式。

多載

GetConstructors()

傳回所有定義給目前 Type 的公用建構函式。

GetConstructors(BindingFlags)

在衍生類別中覆寫時,使用指定的 Type,搜尋定義給目前 BindingFlags 的建構函式。

範例

這個範例 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

因為多載 GetConstructorsPublic 會使用和,所以靜態的函式 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[]

ConstructorInfo 物件組成的陣列,表示定義給目前 Type 的所有公用執行個體建構函式,但不含類型初始設定式 (靜態建構函式)。 如果目前的 Type 沒有定義任何公用執行個體建構函式,或目前的 Type 表示泛型類型或泛型方法定義中的類型參數,則會傳回 ConstructorInfo 類型的空陣列。

實作

屬性

備註

方法不會傳回特定順序的函式 GetConstructors ,例如宣告順序。 您的程式碼不得相依于傳回的函式順序,因為該順序會有所不同。

下表顯示在反映型別時,方法會傳回基類的成員 Get

成員類型 Static 非靜態
建構函式
欄位 可以。 欄位一律會依名稱和簽章進行隱藏。
事件 不適用 一般類型系統規則是,繼承與實作為屬性的方法相同。 反映會將屬性視為隱藏名稱和簽章。 請參閱下面的附注2。
方法 可以。 (虛擬和非虛擬) 的方法都可以依名稱或依名稱、依名稱和簽章來隱藏。
巢狀型別
屬性 不適用 一般類型系統規則是,繼承與實作為屬性的方法相同。 反映會將屬性視為隱藏名稱和簽章。 請參閱下面的附注2。
  1. 依名稱和簽章會考慮簽章的所有部分,包括自訂修飾詞、傳回類型、參數類型、個 sentinel 和非受控呼叫慣例。 這是二進位比較。

  2. 針對反映,屬性和事件會依名稱和簽章來隱藏。 如果您的屬性同時具有基類中的 get 和 set 存取子,但衍生類別只有 get 存取子,則衍生類別屬性會隱藏基類屬性,而且您將無法存取基類的 setter。

  3. 自訂屬性不是一般型別系統的一部分。

這個方法多載會 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 空陣列。

另請參閱

適用於

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

參數

bindingAttr
BindingFlags

列舉值的位元組合,用來指定搜尋的執行方式。

-或- 要傳回空陣列的 Default

傳回

ConstructorInfo[]

ConstructorInfo 物件的陣列,代表為目前 Type 定義之符合指定繫結條件約束的所有建構函式,包括類型初始設定式 (如果已定義)。 如果目前的 ConstructorInfo 沒有定義建構函式,或所定義的建構函式都不符合繫結條件約束,或目前的 Type 表示泛型類型或泛型方法定義中的類型參數,則傳回 Type 類型的空陣列。

實作

屬性

備註

bindingAttr 可以用來指定是否只傳回公用的函式,或是公用和非公用的函式。

下列 BindingFlags 篩選旗標可以用來定義要包含在搜尋中的哪些函式:

  • 指定 BindingFlags.StaticBindingFlags.NonPublic ,以取得 (靜態函式) 的類別初始化運算式。 您也可以使用屬性取得類別初始化運算式 TypeInitializer

  • 同時指定 BindingFlags.Instance 和的一或兩個 BindingFlags.PublicBindingFlags.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 空陣列。

另請參閱

適用於