Type.GetConstructors メソッド (BindingFlags)
派生クラスによってオーバーライドされた場合、指定した BindingFlags を使用して、現在の Type に対して定義されているコンストラクタを検索します。
Overloads Public MustOverride Function GetConstructors( _
ByVal bindingAttr As BindingFlags _) As ConstructorInfo()
[C#]
public abstract ConstructorInfo[] GetConstructors(BindingFlagsbindingAttr);
[C++]
public: virtual ConstructorInfo* GetConstructors(BindingFlagsbindingAttr) [] = 0;
[JScript]
public abstract function GetConstructors(
bindingAttr : BindingFlags) : ConstructorInfo[];
パラメータ
bindingAttr
検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。または
null 参照 (Visual Basic では Nothing) を返す 0。
戻り値
現在の Type にコンストラクタが定義されている場合は、型初期化子を含め、定義されているコンストラクタをのうち指定したバインディング制約に一致するすべてのコンストラクタを表す ConstructorInfo オブジェクトの配列。
または
現在の Type に対してコンストラクタが定義されていないか、または定義されているコンストラクタの中にバインディング制約に一致するものが存在しない場合は、 ConstructorInfo 型の空の配列。
解説
パブリック コンストラクタだけを返すか、パブリック コンストラクタと非パブリック コンストラクタの両方を返すかを指定するには、 bindingAttr を使用します。
厳密に一致する対象が存在しない場合は、一致するものを選択するために、binder は types 配列で指定されたパラメータの型を強制的に変換しようとします。binder が一致するものを選択できない場合は、 null 参照 (Visual Basic では Nothing) が返されます。
次の BindingFlags フィルタ フラグは、検索対象に含めるコンストラクタを定義するために使用できます。
- 戻り値を取得するには、 BindingFlags.Instance または BindingFlags.Static のいずれかを指定する必要があります。
- 検索対象にパブリック コンストラクタを含めるための BindingFlags.Public を指定します。
- 検索対象にパブリックではないコンストラクタ (つまり、プライベート コンストラクタやプロテクト コンストラクタ) を含めるための BindingFlags.NonPublic を指定します。
詳細については、「 System.Reflection.BindingFlags 」を参照してください。
要求された型がパブリックではなく、呼び出し元に現在のアセンブリ外の非パブリック オブジェクトをリフレクションするための ReflectionPermission がない場合、このメソッドは null 参照 (Nothing) を返します。
クラス初期化子は、 GetMember 、 GetMembers 、 FindMembers 、および GetConstructors を通じて使用できます。
使用例
2 つのインスタンス コンストラクタと 1 つの静的コンストラクタを持つクラスからの GetConstructors() () の出力例を次に示します。
Imports System
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
[C#]
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);
}
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;
public __gc class t {
public:
t() {}
static t() {}
t(int /*i*/) {}
};
int main() {
ConstructorInfo* p[] = __typeof(t)->GetConstructors();
Console::WriteLine(p->Length);
for (int i=0;i<p->Length;i++) {
Console::WriteLine(p[i]->IsStatic);
}
}
[JScript]
import System;
import System.Reflection;
public class t {
public function t() {}
static t {}
public function t(i : int) {}
public static function Main(): void {
var p : ConstructorInfo[] = t.GetConstructors();
Console.WriteLine(p.Length);
for (var i : int =0;i<p.Length;i++) {
Console.WriteLine(p[i].IsStatic);
}
}
}
t.Main();
このコードの出力は次のとおりです。
2
False
False
GetConstructors() は Public および Instance の BindingFlags だけを呼び出すため、静的コンストラクタに対しては、 for 式によるカウントも、 IsStatic による評価も行われません。
次のように、 GetConstructors (BindingFlags) を使用して BindingFlags を BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance に渡し、静的コンストラクタを検索します。
Imports System
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
[C#]
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);
}
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;
public __gc class t {
public:
t() {}
t(int /*i*/) {}
static t() {}
};
int main() {
ConstructorInfo* p[] = __typeof(t)->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);
}
}
[JScript]
import System;
import System.Reflection;
public class t {
public function t() {}
static t {}
public function t(i : int) {}
public static function Main() : void {
var p : ConstructorInfo[] = t.GetConstructors(
BindingFlags.Public | BindingFlags.Static |
BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine(p.Length);
for (var i:int=0;i<p.Length;i++) {
Console.WriteLine(p[i].IsStatic);
}
}
}
t.Main();
この出力は次のようになります。
3
False
True
False
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard
.NET Framework セキュリティ:
- ReflectionPermission (非パブリック オブジェクトをリフレクション操作するために必要なアクセス許可) ReflectionPermissionFlag.TypeInformation (関連する列挙体)
参照
Type クラス | Type メンバ | System 名前空間 | Type.GetConstructors オーバーロードの一覧 | ConstructorInfo | BindingFlags | DefaultBinder | ReflectionPermission | GetConstructor