Type.GetMember 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得目前 Type 的指定成員。
多載
GetMember(String) |
搜尋具有指定名稱的公用成員。 |
GetMember(String, BindingFlags) |
使用指定的繫結條件約束搜尋指定的成員。 |
GetMember(String, MemberTypes, BindingFlags) |
使用指定的繫結條件約束,搜尋指定成員類型的指定成員。 |
GetMember(String)
搜尋具有指定名稱的公用成員。
public:
cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name);
public:
virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name);
public System.Reflection.MemberInfo[] GetMember (string name);
member this.GetMember : string -> System.Reflection.MemberInfo[]
abstract member GetMember : string -> System.Reflection.MemberInfo[]
override this.GetMember : string -> System.Reflection.MemberInfo[]
Public Function GetMember (name As String) As MemberInfo()
參數
- name
- String
字串,包含要取得的公用成員名稱。
傳回
MemberInfo 物件的陣列,代表具有指定名稱的公用成員 (如有找到);否則為空陣列。
實作
例外狀況
name
為 null
。
範例
下列範例 String
會顯示以字母 C 為開頭之類別的所有成員。
using namespace System;
using namespace System::Security;
using namespace System::Reflection;
// forward declarations:
void GetMemberInfo();
void GetPublicStaticMemberInfo();
void GetPublicInstanceMethodMemberInfo();
int main()
{
try
{
GetMemberInfo();
GetPublicStaticMemberInfo();
GetPublicInstanceMethodMemberInfo();
}
catch ( ArgumentNullException^ e )
{
Console::WriteLine( "ArgumentNullException occurred." );
Console::WriteLine( "Source: {0}", e->Source );
Console::WriteLine( "Message: {0}", e->Message );
}
catch ( NotSupportedException^ e )
{
Console::WriteLine( "NotSupportedException occurred." );
Console::WriteLine( "Source: {0}", e->Source );
Console::WriteLine( "Message: {0}", e->Message );
}
catch ( SecurityException^ e )
{
Console::WriteLine( "SecurityException occurred." );
Console::WriteLine( "Source: {0}", e->Source );
Console::WriteLine( "Message: {0}", e->Message );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception occurred." );
Console::WriteLine( "Source: {0}", e->Source );
Console::WriteLine( "Message: {0}", e->Message );
}
}
void GetMemberInfo()
{
String^ myString = "GetMember_String";
Type^ myType = myString->GetType();
// Get the members for myString starting with the letter C.
array<MemberInfo^>^myMembers = myType->GetMember( "C*" );
if ( myMembers->Length > 0 )
{
Console::WriteLine( "\nThe member(s) starting with the letter C for type {0}:", myType );
for ( int index = 0; index < myMembers->Length; index++ )
Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
}
else
Console::WriteLine( "No members match the search criteria." );
}
using System;
using System.Security;
using System.Reflection;
public class MyMemberSample
{
public static void Main()
{
MyMemberSample myClass = new MyMemberSample();
try
{
myClass.GetMemberInfo();
myClass.GetPublicStaticMemberInfo();
myClass.GetPublicInstanceMethodMemberInfo();
}
catch(ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException occurred.");
Console.WriteLine("Source: " + e.Source);
Console.WriteLine("Message: " + e.Message);
}
catch(NotSupportedException e)
{
Console.WriteLine("NotSupportedException occurred.");
Console.WriteLine("Source: " + e.Source);
Console.WriteLine("Message: " + e.Message);
}
catch(SecurityException e)
{
Console.WriteLine("SecurityException occurred.");
Console.WriteLine("Source: " + e.Source);
Console.WriteLine("Message: " + e.Message);
}
catch(Exception e)
{
Console.WriteLine("Exception occurred.");
Console.WriteLine("Source: " + e.Source);
Console.WriteLine("Message: " + e.Message);
}
}
public void GetMemberInfo()
{
String myString = "GetMember_String";
Type myType = myString.GetType();
// Get the members for myString starting with the letter C.
MemberInfo[] myMembers = myType.GetMember("C*");
if(myMembers.Length > 0)
{
Console.WriteLine("\nThe member(s) starting with the letter C for type {0}:", myType);
for(int index=0; index < myMembers.Length; index++)
Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
}
else
{
Console.WriteLine("No members match the search criteria.");
}
}
Imports System.Security
Imports System.Reflection
Public Class MyMemberSample
Public Shared Sub Main()
Dim [myClass] As New MyMemberSample()
Try
[myClass].GetMemberInfo()
[myClass].GetPublicStaticMemberInfo()
[myClass].GetPublicInstanceMethodMemberInfo()
Catch e As ArgumentNullException
Console.WriteLine("ArgumentNullException occurred.")
Console.WriteLine(("Source: " + e.Source))
Console.WriteLine(("Message: " + e.Message))
Catch e As NotSupportedException
Console.WriteLine("NotSupportedException occurred.")
Console.WriteLine(("Source: " + e.Source))
Console.WriteLine(("Message: " + e.Message))
Catch e As SecurityException
Console.WriteLine("SecurityException occurred.")
Console.WriteLine(("Source: " + e.Source))
Console.WriteLine(("Message: " + e.Message))
Catch e As Exception
Console.WriteLine("Exception occurred.")
Console.WriteLine(("Source: " + e.Source))
Console.WriteLine(("Message: " + e.Message))
End Try
End Sub
Public Sub GetMemberInfo()
Dim myString As [String] = "GetMember_String"
Dim myType As Type = myString.GetType()
' Get the members for myString starting with the letter C.
Dim myMembers As MemberInfo() = myType.GetMember("C*")
If myMembers.Length > 0 Then
Console.WriteLine(ControlChars.Cr + "The member(s) starting with the letter C for type {0}:", myType)
Dim index As Integer
For index = 0 To myMembers.Length - 1
Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
Next index
Else
Console.WriteLine("No members match the search criteria.")
End If
End Sub
備註
搜尋會區分 name
大小寫。 搜尋包含公用靜態和公用實例成員。
成員包括屬性、方法、欄位、事件等等。
GetMember方法不會以特定順序傳回成員,例如字母順序或宣告順序。 您的程式碼不得相依于傳回成員的順序,因為該順序會有所不同。
這個方法多載不會 (靜態的函式) 找到類別初始化運算式。 若要尋找類別初始化運算式,請使用採用的多載, BindingFlags 並指定 BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or
BindingFlags.NonPublic Visual Basic) 中 | (。 您也可以使用屬性取得類別初始化運算式 TypeInitializer 。
下表顯示在反映型別時,方法會傳回基類的成員 Get
。
成員類型 | Static | 非靜態 |
---|---|---|
建構函式 | 否 | 否 |
欄位 | 否 | 可以。 欄位一律會依名稱和簽章進行隱藏。 |
事件 | 不適用 | 一般類型系統規則是,繼承與實作為屬性的方法相同。 反映會將屬性視為隱藏名稱和簽章。 請參閱下面的附注2。 |
方法 | 否 | 可以。 (虛擬和非虛擬) 的方法都可以依名稱或依名稱、依名稱和簽章來隱藏。 |
巢狀型別 | 否 | 否 |
屬性 | 不適用 | 一般類型系統規則是,繼承與實作為屬性的方法相同。 反映會將屬性視為隱藏名稱和簽章。 請參閱下面的附注2。 |
依名稱和簽章會考慮簽章的所有部分,包括自訂修飾詞、傳回類型、參數類型、個 sentinel 和非受控呼叫慣例。 這是二進位比較。
針對反映,屬性和事件會依名稱和簽章來隱藏。 如果您的屬性同時具有基類中的 get 和 set 存取子,但衍生類別只有 get 存取子,則衍生類別屬性會隱藏基類屬性,而且您將無法存取基類的 setter。
自訂屬性不是一般型別系統的一部分。
如果目前的 Type 代表結構化泛型型別,這個方法會傳回, MemberInfo 並以適當的型別引數取代型別參數。
如果目前 Type 表示泛型型別或泛型方法定義中的類型參數,這個方法會搜尋類別條件約束的成員, Object 如果沒有類別條件約束,則會搜尋的成員。
注意
若為泛型方法,請勿在中包含型別引數 name
。 例如,c # 程式碼 GetMember("MyMethod<int>")
會搜尋文字名稱為 "" 的成員 MyMethod<int>
,而不是使用 MyMethod
類型為的泛型引數之名為的方法 int
。
另請參閱
- MemberInfo
- String
- DefaultBinder
- GetMembers()
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)
適用於
GetMember(String, BindingFlags)
使用指定的繫結條件約束搜尋指定的成員。
public:
virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
public virtual System.Reflection.MemberInfo[] GetMember (string name, System.Reflection.BindingFlags bindingAttr);
abstract member GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
override this.GetMember : string * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
Public Overridable Function GetMember (name As String, bindingAttr As BindingFlags) As MemberInfo()
參數
- name
- String
字串,包含要取得的成員名稱。
傳回
MemberInfo 物件的陣列,代表具有指定名稱的公用成員 (如有找到);否則為空陣列。
實作
例外狀況
name
為 null
。
範例
下列範例 myString
會顯示以字母 C 為開頭之類別的所有公用靜態成員。
void GetPublicStaticMemberInfo()
{
String^ myString = "GetMember_String_BindingFlag";
Type^ myType = myString->GetType();
// Get the public static members for the class myString starting with the letter C
array<MemberInfo^>^myMembers = myType->GetMember( "C*", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Static) );
if ( myMembers->Length > 0 )
{
Console::WriteLine( "\nThe public static member(s) starting with the letter C for type {0}:", myType );
for ( int index = 0; index < myMembers->Length; index++ )
Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
}
else
Console::WriteLine( "No members match the search criteria." );
}
public void GetPublicStaticMemberInfo()
{
String myString = "GetMember_String_BindingFlag";
Type myType = myString.GetType();
// Get the public static members for the class myString starting with the letter C.
MemberInfo[] myMembers = myType.GetMember("C*",
BindingFlags.Public |BindingFlags.Static);
if(myMembers.Length > 0)
{
Console.WriteLine("\nThe public static member(s) starting with the letter C for type {0}:", myType);
for(int index=0; index < myMembers.Length; index++)
Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
}
else
{
Console.WriteLine("No members match the search criteria.");
}
}
Public Sub GetPublicStaticMemberInfo()
Dim myString As [String] = "GetMember_String_BindingFlag"
Dim myType As Type = myString.GetType()
' Get the public static members for the class myString starting with the letter C.
Dim myMembers As MemberInfo() = myType.GetMember("C*", BindingFlags.Public Or BindingFlags.Static)
If myMembers.Length > 0 Then
Console.WriteLine(ControlChars.Cr + "The public static member(s) starting with the letter C for type {0}:", myType)
Dim index As Integer
For index = 0 To myMembers.Length - 1
Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
Next index
Else
Console.WriteLine("No members match the search criteria.")
End If
End Sub
備註
衍生類別可以覆寫這個方法。
成員包括屬性、方法、欄位、事件等等。
GetMember方法不會以特定順序傳回成員,例如字母順序或宣告順序。 您的程式碼不得相依于傳回成員的順序,因為該順序會有所不同。
您 BindingFlags 可以使用下列篩選旗標來定義要包含在搜尋中的成員:
您必須指定或,才能
BindingFlags.Instance
BindingFlags.Static
取得傳回。指定
BindingFlags.Public
要在搜尋中包含公用成員。指定
BindingFlags.NonPublic
要在搜尋中包含 (的非公用成員,也就是私用、內部和受保護成員) 。指定
BindingFlags.FlattenHierarchy
要public
在階層中包含和protected
靜態成員;private
不包含繼承類別中的靜態成員。
您 BindingFlags 可以使用下列修飾詞旗標來變更搜尋的運作方式:
BindingFlags.IgnoreCase
忽略的案例name
。BindingFlags.DeclaredOnly
表示只搜尋在上宣告的成員 Type ,而不是直接繼承的成員。
如需相關資訊,請參閱 System.Reflection.BindingFlags 。
若要使用這個方法多載來取得類別初始化運算式 (靜態的函式) ,您必須為指定「靜態函式」 name
,並 BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or
BindingFlags.NonPublic 在的 Visual Basic) 中指定 | (bindingAttr
。 您也可以使用屬性取得類別初始化運算式 TypeInitializer 。
如果目前的 Type 代表結構化泛型型別,這個方法會傳回, MemberInfo 並以適當的型別引數取代型別參數。
如果目前 Type 表示泛型型別或泛型方法定義中的類型參數,這個方法會搜尋類別條件約束的成員, Object 如果沒有類別條件約束,則會搜尋的成員。
注意
若為泛型方法,請勿在中包含型別引數 name
。 例如,c # 程式碼 GetMember("MyMethod<int>")
會搜尋文字名稱為 "" 的成員 MyMethod<int>
,而不是使用 MyMethod
類型為的泛型引數之名為的方法 int
。
另請參閱
- MemberInfo
- String
- BindingFlags
- DefaultBinder
- GetMembers()
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)
適用於
GetMember(String, MemberTypes, BindingFlags)
使用指定的繫結條件約束,搜尋指定成員類型的指定成員。
public:
virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMember(System::String ^ name, System::Reflection::MemberTypes type, System::Reflection::BindingFlags bindingAttr);
public virtual System.Reflection.MemberInfo[] GetMember (string name, System.Reflection.MemberTypes type, System.Reflection.BindingFlags bindingAttr);
abstract member GetMember : string * System.Reflection.MemberTypes * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
override this.GetMember : string * System.Reflection.MemberTypes * System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
Public Overridable Function GetMember (name As String, type As MemberTypes, bindingAttr As BindingFlags) As MemberInfo()
參數
- name
- String
字串,包含要取得的成員名稱。
- type
- MemberTypes
要搜尋的值。
傳回
MemberInfo 物件的陣列,代表具有指定名稱的公用成員 (如有找到);否則為空陣列。
實作
例外狀況
name
為 null
。
衍生類別必須提供實作。
範例
下列範例 myString
會顯示以字母 C 為開頭之類別的所有方法。
void GetPublicInstanceMethodMemberInfo()
{
String^ myString = "GetMember_String_MemberType_BindingFlag";
Type^ myType = myString->GetType();
// Get the public instance methods for myString starting with the letter C.
array<MemberInfo^>^myMembers = myType->GetMember( "C*", MemberTypes::Method, static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
if ( myMembers->Length > 0 )
{
Console::WriteLine( "\nThe public instance method(s) starting with the letter C for type {0}:", myType );
for ( int index = 0; index < myMembers->Length; index++ )
Console::WriteLine( "Member {0}: {1}", index + 1, myMembers[ index ] );
}
else
Console::WriteLine( "No members match the search criteria." );
}
public void GetPublicInstanceMethodMemberInfo()
{
String myString = "GetMember_String_MemberType_BindingFlag";
Type myType = myString.GetType();
// Get the public instance methods for myString starting with the letter C.
MemberInfo[] myMembers = myType.GetMember("C*", MemberTypes.Method,
BindingFlags.Public | BindingFlags.Instance);
if(myMembers.Length > 0)
{
Console.WriteLine("\nThe public instance method(s) starting with the letter C for type {0}:", myType);
for(int index=0; index < myMembers.Length; index++)
Console.WriteLine("Member {0}: {1}", index + 1, myMembers[index].ToString());
}
else
{
Console.WriteLine("No members match the search criteria.");
}
}
}
Public Sub GetPublicInstanceMethodMemberInfo()
Dim myString As [String] = "GetMember_String_MemberType_BindingFlag"
Dim myType As Type = myString.GetType()
' Get the public instance methods for myString starting with the letter C.
Dim myMembers As MemberInfo() = myType.GetMember("C*", MemberTypes.Method, BindingFlags.Public Or BindingFlags.Instance)
If myMembers.Length > 0 Then
Console.WriteLine(ControlChars.Cr + "The public instance method(s) starting with the letter C for type {0}:", myType)
Dim index As Integer
For index = 0 To myMembers.Length - 1
Console.WriteLine("Member {0}: {1}", index + 1, myMembers(index).ToString())
Next index
Else
Console.WriteLine("No members match the search criteria.")
End If
End Sub
End Class
備註
成員包括屬性、方法、欄位、事件等等。
GetMember方法不會以特定順序傳回成員,例如字母順序或宣告順序。 您的程式碼不得相依于傳回成員的順序,因為該順序會有所不同。
您 BindingFlags 可以使用下列篩選旗標來定義要包含在搜尋中的成員:
您必須指定或,才能
BindingFlags.Instance
BindingFlags.Static
取得傳回。指定
BindingFlags.Public
要在搜尋中包含公用成員。指定
BindingFlags.NonPublic
要在搜尋中包含 (的非公用成員,也就是私用、內部和受保護成員) 。指定
BindingFlags.FlattenHierarchy
要public
在階層中包含和protected
靜態成員;private
不包含繼承類別中的靜態成員。
您 BindingFlags 可以使用下列修飾詞旗標來變更搜尋的運作方式:
BindingFlags.IgnoreCase
忽略的案例name
。BindingFlags.DeclaredOnly
表示只搜尋在上宣告的成員 Type ,而不是直接繼承的成員。
如需相關資訊,請參閱 System.Reflection.BindingFlags 。
若要使用這個方法多載來取得類別初始化運算式 (靜態的函式) ,您必須 name
MemberTypes.Constructor type
BindingFlags.Static BindingFlags.NonPublic BindingFlags.Static Or
BindingFlags.NonPublic 在的 Visual Basic) 中 bindingAttr
指定「靜態函式」的、for 和 | (。 您也可以使用屬性取得類別初始化運算式 TypeInitializer 。
如果目前的 Type 代表結構化泛型型別,這個方法會傳回, MemberInfo 並以適當的型別引數取代型別參數。
如果目前 Type 表示泛型型別或泛型方法定義中的類型參數,這個方法會搜尋類別條件約束的成員, Object 如果沒有類別條件約束,則會搜尋的成員。
注意
若為泛型方法,請勿在中包含型別引數 name
。 例如,c # 程式碼 GetMember("MyMethod<int>")
會搜尋文字名稱為 "" 的成員 MyMethod<int>
,而不是使用 MyMethod
類型為的泛型引數之名為的方法 int
。
另請參閱
- MemberInfo
- String
- BindingFlags
- DefaultBinder
- GetMembers()
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)