Type.FindMembers メソッド
指定したメンバ型の MemberInfo オブジェクトの配列にフィルタを適用して返します。
Public Overridable Function FindMembers( _
ByVal memberType As MemberTypes, _ ByVal bindingAttr As BindingFlags, _ ByVal filter As MemberFilter, _ ByVal filterCriteria As Object _) As MemberInfo()
[C#]
public virtual MemberInfo[] FindMembers(MemberTypesmemberType,BindingFlagsbindingAttr,MemberFilterfilter,objectfilterCriteria);
[C++]
public: virtual MemberInfo* FindMembers(MemberTypesmemberType,BindingFlagsbindingAttr,MemberFilter* filter,Object* filterCriteria) [];
[JScript]
public function FindMembers(
memberType : MemberTypes,bindingAttr : BindingFlags,filter : MemberFilter,filterCriteria : Object) : MemberInfo[];
パラメータ
memberType
検索するメンバの型を示す MemberTypes オブジェクト。bindingAttr
検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。または
null 参照 (Visual Basic では Nothing) を返す 0。
filter
比較を実行して、現在調べているメンバが filterCriteria に一致する場合は true を返し、それ以外の場合は false を返すデリゲート。このクラスで提供される FilterAttribute デリゲート、 FilterName デリゲート、および FilterNameIgnoreCase デリゲートを使用できます。1 つ目のデリゲートは、検索条件として FieldAttributes 、 MethodAttributes 、 MethodImplAttributes の各フィールドを使用し、他の 2 つのデリゲートは、検索条件として String オブジェクトを使用します。filterCriteria
MemberInfo オブジェクトの配列でメンバが返されたかどうかを判断する検索条件。FieldAttributes 、 MethodAttributes 、 MethodImplAttributes の各フィールドは、このクラスで提供される FilterAttribute デリゲートと組み合わせて使用できます。
戻り値
指定したメンバ型の MemberInfo オブジェクトのフィルタ適用済みの配列。
または
現在の Type に、フィルタ条件に一致する memberType 型のメンバが存在しない場合は、 MemberInfo 型の空の配列。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | filter が null 参照 (Visual Basic では Nothing) です。 |
解説
このメソッドは、派生クラスでオーバーライドできます。
メンバには、プロパティ、メソッド、フィールド、イベントなどがあります。要求された型がパブリックではなく、呼び出し元に現在のアセンブリ外の非パブリック オブジェクトをリフレクションするための ReflectionPermission がない場合、このメソッドは null 参照 (Visual Basic では Nothing) を返します。
次の BindingFlags フィルタ フラグは、検索対象に含めるメンバを定義するために使用できます。
- 検索対象にインスタンスのメンバを含めるための Instance。
- 検索対象に静的メンバを含めるための Static 。
- 検索対象にパブリック メンバを含めるための Public 。
- 検索対象にパブリックではないメンバ (つまり、プライベート メンバやプロテクト メンバ) を含めるための NonPublic 。
次の BindingFlags 修飾フラグは、検索方法を変更するために使用できます。
- Type で宣言されたメンバだけを検索するための DeclaredOnly 。単に継承されただけのメンバは検索されません。
詳細については、「 System.Reflection.BindingFlags 」を参照してください。
MemberType の有効な値は、 MemberInfo で定義されます。それらのメンバが見つからない場合は、空の配列が返されます。
クラス初期化子は、 GetMember 、 GetMembers 、 FindMembers 、および GetConstructors を通じて使用できます。
使用例
[Visual Basic, C#, C++] 指定した検索条件に一致するクラスのメンバをすべて検索し、一致したメンバを表示する例を次に示します。
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Class MyFindMembersClass
Public Shared Sub Main()
Dim objTest As New Object()
Dim objType As Type = objTest.GetType()
Dim arrayMemberInfo() As MemberInfo
Try
'Find all static or public methods in the Object
'class that match the specified name.
arrayMemberInfo = objType.FindMembers(MemberTypes.Method, _
BindingFlags.Public Or BindingFlags.Static _
Or BindingFlags.Instance, _
New MemberFilter(AddressOf DelegateToSearchCriteria), _
"ReferenceEquals")
Dim index As Integer
For index = 0 To arrayMemberInfo.Length - 1
Console.WriteLine("Result of FindMembers -" + ControlChars.Tab + _
arrayMemberInfo(index).ToString() + ControlChars.Cr)
Next index
Catch e As Exception
Console.WriteLine("Exception : " + e.ToString())
End Try
End Sub 'Main
Public Shared Function DelegateToSearchCriteria _
(ByVal objMemberInfo As MemberInfo, _
ByVal objSearch As Object) As Boolean
' Compare the name of the member function with the filter criteria.
If objMemberInfo.Name.ToString() = objSearch.ToString() Then
Return True
Else
Return False
End If
End Function 'DelegateToSearchCriteria
End Class 'MyFindMembersClass
[C#]
using System;
using System.Reflection;
class MyFindMembersClass
{
public static void Main()
{
Object objTest = new Object();
Type objType = objTest.GetType ();
MemberInfo[] arrayMemberInfo;
try
{
//Find all static or public methods in the Object class that match the specified name.
arrayMemberInfo = objType.FindMembers(MemberTypes.Method,
BindingFlags.Public | BindingFlags.Static| BindingFlags.Instance,
new MemberFilter(DelegateToSearchCriteria),
"ReferenceEquals");
for(int index=0;index < arrayMemberInfo.Length ;index++)
Console.WriteLine ("Result of FindMembers -\t"+ arrayMemberInfo[index].ToString() +"\n");
}
catch (Exception e)
{
Console.WriteLine ("Exception : " + e.ToString() );
}
}
public static bool DelegateToSearchCriteria(MemberInfo objMemberInfo, Object objSearch)
{
// Compare the name of the member function with the filter criteria.
if(objMemberInfo.Name.ToString() == objSearch.ToString())
return true;
else
return false;
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;
__gc class MyFindMembersClass {
public:
static void Test() {
Object* objTest = new Object();
Type* objType = objTest->GetType ();
MemberInfo* arrayMemberInfo[];
try {
//Find all static or public methods in the Object class that match the specified name.
arrayMemberInfo = objType->FindMembers(MemberTypes::Method,
static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static| BindingFlags::Instance),
new MemberFilter(0, DelegateToSearchCriteria),
S"ReferenceEquals");
for (int index=0;index < arrayMemberInfo->Length ;index++)
Console::WriteLine (S"Result of FindMembers -\t {0}",
String::Concat( arrayMemberInfo[index], S"\n"));
} catch (Exception* e) {
Console::WriteLine (S"Exception : {0}", e);
}
}
static bool DelegateToSearchCriteria(MemberInfo* objMemberInfo, Object* objSearch) {
// Compare the name of the member function with the filter criteria.
if (objMemberInfo->Name->Equals(objSearch->ToString()))
return true;
else
return false;
}
};
int main()
{
MyFindMembersClass::Test();
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
.NET Framework セキュリティ:
- ReflectionPermission (非パブリック オブジェクトをリフレクション操作するために必要なアクセス許可) ReflectionPermissionFlag.TypeInformation (関連する列挙体)
参照
Type クラス | Type メンバ | System 名前空間 | MemberInfo | BindingFlags | DefaultBinder | ReflectionPermission | GetMember | GetMembers | GetDefaultMembers