Type.GetMembers Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera elementy członkowskie (właściwości, metody, pola, zdarzenia itd.) bieżącego Typeelementu .
Przeciążenia
GetMembers(BindingFlags) |
Po zastąpieniu w klasie pochodnej wyszukuje składowe zdefiniowane dla bieżącego Typeelementu , przy użyciu określonych ograniczeń powiązania. |
GetMembers() |
Zwraca wszystkich publicznych członków bieżącego Typeelementu . |
GetMembers(BindingFlags)
- Źródło:
- Type.cs
- Źródło:
- Type.cs
- Źródło:
- Type.cs
Po zastąpieniu w klasie pochodnej wyszukuje składowe zdefiniowane dla bieżącego Typeelementu , przy użyciu określonych ograniczeń powiązania.
public:
abstract cli::array <System::Reflection::MemberInfo ^> ^ GetMembers(System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.MemberInfo[] GetMembers (System.Reflection.BindingFlags bindingAttr);
abstract member GetMembers : System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
Public MustOverride Function GetMembers (bindingAttr As BindingFlags) As MemberInfo()
Parametry
- bindingAttr
- BindingFlags
Bitowa kombinacja wartości wyliczenia, które określają sposób przeprowadzania wyszukiwania.
-lub-
Default aby zwrócić pustą tablicę.
Zwraca
Tablica MemberInfo obiektów reprezentujących wszystkie elementy członkowskie zdefiniowane dla bieżącego Type , które są zgodne z określonymi ograniczeniami powiązania.
-lub-
Pusta tablica, jeśli żadne elementy członkowskie nie są zdefiniowane dla bieżącego Typeelementu lub jeśli żaden ze zdefiniowanych elementów członkowskich nie pasuje do ograniczeń powiązania.
Implementuje
Przykłady
W poniższym przykładzie kodu pokazano, jak używać GetMembers(BindingFlags) przeciążenia metody do zbierania informacji o wszystkich elementach członkowskich wystąpienia publicznego określonej klasy.
ref class MyClass
{
public:
int * myInt;
String^ myString;
MyClass(){}
void Myfunction(){}
};
int main()
{
try
{
MyClass^ MyObject = gcnew MyClass;
array<MemberInfo^>^myMemberInfo;
// Get the type of the class 'MyClass'.
Type^ myType = MyObject->GetType();
// Get the public instance members of the class 'MyClass'.
myMemberInfo = myType->GetMembers( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
Console::WriteLine( "\nThe public instance members of class '{0}' are : \n", myType );
for ( int i = 0; i < myMemberInfo->Length; i++ )
{
// Display name and type of the member of 'MyClass'.
Console::WriteLine( "'{0}' is a {1}", myMemberInfo[ i ]->Name, myMemberInfo[ i ]->MemberType );
}
}
catch ( SecurityException^ e )
{
Console::WriteLine( "SecurityException : {0}", e->Message );
}
//Output:
//The public instance members of class 'MyClass' are :
//'Myfunction' is a Method
//'ToString' is a Method
//'Equals' is a Method
//'GetHashCode' is a Method
//'GetType' is a Method
//'.ctor' is a Constructor
//'myInt' is a Field
//'myString' is a Field
}
class MyClass
{
public int myInt = 0;
public string myString = null;
public MyClass()
{
}
public void Myfunction()
{
}
}
class Type_GetMembers_BindingFlags
{
public static void Main()
{
try
{
MyClass MyObject = new MyClass();
MemberInfo [] myMemberInfo;
// Get the type of the class 'MyClass'.
Type myType = MyObject.GetType();
// Get the public instance members of the class 'MyClass'.
myMemberInfo = myType.GetMembers(BindingFlags.Public|BindingFlags.Instance);
Console.WriteLine( "\nThe public instance members of class '{0}' are : \n", myType);
for (int i =0 ; i < myMemberInfo.Length ; i++)
{
// Display name and type of the member of 'MyClass'.
Console.WriteLine( "'{0}' is a {1}", myMemberInfo[i].Name, myMemberInfo[i].MemberType);
}
}
catch (SecurityException e)
{
Console.WriteLine("SecurityException : " + e.Message );
}
//Output:
//The public instance members of class 'MyClass' are :
//'Myfunction' is a Method
//'ToString' is a Method
//'Equals' is a Method
//'GetHashCode' is a Method
//'GetType' is a Method
//'.ctor' is a Constructor
//'myInt' is a Field
//'myString' is a Field
}
}
open System.Reflection
open System.Security
type MyClass =
val public myInt: int
val public myString: string
new () = { myInt = 0; myString = null}
member _.MyMethod() = ()
try
let MyObject = MyClass()
// Get the type of the class 'MyClass'.
let myType = MyObject.GetType()
// Get the public instance members of the class 'MyClass'.
let myMemberInfo = myType.GetMembers(BindingFlags.Public ||| BindingFlags.Instance)
printfn $"\nThe public instance members of class '{myType}' are : \n"
for i = 0 to myMemberInfo.Length - 1 do
// Display name and type of the member of 'MyClass'.
printfn $"'{myMemberInfo[i].Name}' is a {myMemberInfo[i].MemberType}"
with :? SecurityException as e ->
printfn $"SecurityException : {e.Message}"
//Output:
//The public instance members of class 'MyClass' are :
//'Myfunction' is a Method
//'ToString' is a Method
//'Equals' is a Method
//'GetHashCode' is a Method
//'GetType' is a Method
//'.ctor' is a Constructor
//'myInt' is a Field
//'myString' is a Field
Class [MyClass]
Public myInt As Integer = 0
Public myString As String = Nothing
Public Sub New()
End Sub
Public Sub Myfunction()
End Sub
End Class
Class Type_GetMembers_BindingFlags
Public Shared Sub Main()
Try
Dim MyObject As New [MyClass]()
Dim myMemberInfo() As MemberInfo
' Get the type of the class 'MyClass'.
Dim myType As Type = MyObject.GetType()
' Get the public instance members of the class 'MyClass'.
myMemberInfo = myType.GetMembers((BindingFlags.Public Or BindingFlags.Instance))
Console.WriteLine(ControlChars.Cr + "The public instance members of class '{0}' are : " + ControlChars.Cr, myType)
Dim i As Integer
For i = 0 To myMemberInfo.Length - 1
' Display name and type of the member of 'MyClass'.
Console.WriteLine("'{0}' is a {1}", myMemberInfo(i).Name, myMemberInfo(i).MemberType)
Next i
Catch e As SecurityException
Console.WriteLine(("SecurityException : " + e.Message.ToString()))
End Try
'Output:
'The public instance members of class 'MyClass' are :
''Myfunction' is a Method
''ToString' is a Method
''Equals' is a Method
''GetHashCode' is a Method
''GetType' is a Method
''.ctor' is a Constructor
''myInt' is a Field
''myString' is a Field
End Sub
End Class
Uwagi
Składowe obejmują właściwości, metody, konstruktory, pola, zdarzenia i typy zagnieżdżone.
GetMethods(BindingFlags)
Aby przeciążenie mogło pomyślnie pobrać informacje o metodzie, bindingAttr
argument musi zawierać co najmniej jeden element BindingFlags.Instance i BindingFlags.Staticoraz co najmniej jeden BindingFlags.NonPublic z elementów i BindingFlags.Public. Jedynym wyjątkiem jest wywołanie metody z elementem BindingFlags.NonPublic, które zwraca informacje o typach zagnieżdżonych.
Następujące BindingFlags flagi filtru mogą służyć do definiowania elementów członkowskich do uwzględnienia w wyszukiwaniu:
Określ
BindingFlags.Instance
, aby uwzględnić metody wystąpienia.Określ
BindingFlags.Static
, aby uwzględnić metody statyczne.Określ
BindingFlags.Public
, aby uwzględnić metody publiczne w wyszukiwaniu.Określ
BindingFlags.NonPublic
, aby uwzględnić metody inne niż publiczne (czyli metody prywatne, wewnętrzne i chronione) w wyszukiwaniu. Zwracane są tylko metody chronione i wewnętrzne w klasach bazowych; metody prywatne w klasach bazowych nie są zwracane.Określ
BindingFlags.FlattenHierarchy
, aby uwzględnićpublic
iprotected
statyczne elementy członkowskie w hierarchii;private
statyczne elementy członkowskie w klasach dziedziczynych nie są uwzględniane.Określ
BindingFlags.Default
sam, aby zwrócić pustą MethodInfo tablicę.
Następujące BindingFlags flagi modyfikatora mogą służyć do zmiany sposobu działania wyszukiwania:
-
BindingFlags.DeclaredOnly
aby wyszukać tylko elementy członkowskie zadeklarowane w elemecie Type, a nie na elementach członkowskich, które zostały po prostu odziedziczone.
Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.
W programie .NET 6 i starszych wersjach GetMembers metoda nie zwraca elementów członkowskich w określonej kolejności, takiej jak kolejność alfabetyczna lub deklaracja. Kod nie może zależeć od kolejności, w której są zwracane elementy członkowskie, ponieważ kolejność się zmienia. Jednak począwszy od platformy .NET 7 kolejność jest deterministyczna na podstawie kolejności metadanych w zestawie.
Aby uzyskać inicjator klasy (konstruktor statyczny) przy użyciu tego przeciążenia metody, należy określić BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOr
BindingFlags.NonPublic w Visual Basic). Inicjator klasy można również pobrać przy użyciu TypeInitializer właściwości .
Jeśli bieżący Type reprezentuje skonstruowany typ ogólny, ta metoda zwraca MemberInfo obiekty z parametrami typu zastąpionymi przez odpowiednie argumenty typu.
Jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda przeszukuje składowe ograniczenia klasy lub składowych Object , jeśli nie ma ograniczenia klasy.
Zobacz też
- MemberInfo
- BindingFlags
- DefaultBinder
- GetMember(String)
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)
Dotyczy
GetMembers()
- Źródło:
- Type.cs
- Źródło:
- Type.cs
- Źródło:
- Type.cs
Zwraca wszystkich publicznych członków bieżącego Typeelementu .
public:
cli::array <System::Reflection::MemberInfo ^> ^ GetMembers();
public:
virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMembers();
public System.Reflection.MemberInfo[] GetMembers ();
member this.GetMembers : unit -> System.Reflection.MemberInfo[]
abstract member GetMembers : unit -> System.Reflection.MemberInfo[]
override this.GetMembers : unit -> System.Reflection.MemberInfo[]
Public Function GetMembers () As MemberInfo()
Zwraca
Tablica MemberInfo obiektów reprezentujących wszystkie publiczne elementy członkowskie bieżącego Typeobiektu .
-lub-
Pusta tablica typu MemberInfo, jeśli bieżąca Type nie ma publicznych elementów członkowskich.
Implementuje
Przykłady
W poniższym przykładzie kodu pokazano, jak używać GetMembers() przeciążenia metody do zbierania informacji o wszystkich publicznych elementach członkowskich określonej klasy.
ref class MyClass
{
public:
int myInt;
String^ myString;
MyClass(){}
void Myfunction(){}
};
int main()
{
try
{
MyClass^ myObject = gcnew MyClass;
array<MemberInfo^>^myMemberInfo;
// Get the type of 'MyClass'.
Type^ myType = myObject->GetType();
// Get the information related to all public members of 'MyClass'.
myMemberInfo = myType->GetMembers();
Console::WriteLine( "\nThe members of class '{0}' are :\n", myType );
for ( int i = 0; i < myMemberInfo->Length; i++ )
{
// Display name and type of the concerned member.
Console::WriteLine( "'{0}' is a {1}", myMemberInfo[ i ]->Name, myMemberInfo[ i ]->MemberType );
}
}
catch ( SecurityException^ e )
{
Console::WriteLine( "Exception : {0}", e->Message );
}
}
class MyClass
{
public int myInt = 0;
public string myString = null;
public MyClass()
{
}
public void Myfunction()
{
}
}
class Type_GetMembers
{
public static void Main()
{
try
{
MyClass myObject = new MyClass();
MemberInfo[] myMemberInfo;
// Get the type of 'MyClass'.
Type myType = myObject.GetType();
// Get the information related to all public member's of 'MyClass'.
myMemberInfo = myType.GetMembers();
Console.WriteLine( "\nThe members of class '{0}' are :\n", myType);
for (int i =0 ; i < myMemberInfo.Length ; i++)
{
// Display name and type of the concerned member.
Console.WriteLine( "'{0}' is a {1}", myMemberInfo[i].Name, myMemberInfo[i].MemberType);
}
}
catch(SecurityException e)
{
Console.WriteLine("Exception : " + e.Message );
}
}
}
type MyClass =
val public myInt: int
val public myString: string
new () = { myInt = 0; myString = null}
member _.MyMethod() = ()
try
let myObject = MyClass()
// Get the type of 'MyClass'.
let myType = myObject.GetType()
// Get the information related to all public member's of 'MyClass'.
let myMemberInfo = myType.GetMembers()
printfn $"\nThe members of class '{myType}' are :\n"
for i = 0 to myMemberInfo.Length - 1 do
// Display name and type of the concerned member.
printfn $"'{myMemberInfo[i].Name}' is a {myMemberInfo[i].MemberType}"
with e ->
printfn $"Exception : {e.Message}"
Class [MyClass]
Public myInt As Integer = 0
Public myString As String = Nothing
Public Sub New()
End Sub
Public Sub Myfunction()
End Sub
End Class
Class Type_GetMembers
Public Shared Sub Main()
Try
Dim myObject As New [MyClass]()
Dim myMemberInfo() As MemberInfo
' Get the type of 'MyClass'.
Dim myType As Type = myObject.GetType()
' Get the information related to all public member's of 'MyClass'.
myMemberInfo = myType.GetMembers()
Console.WriteLine(ControlChars.Cr + "The members of class '{0}' are :" + ControlChars.Cr, myType)
Dim i As Integer
For i = 0 To myMemberInfo.Length - 1
' Display name and type of the concerned member.
Console.WriteLine("'{0}' is a {1}", myMemberInfo(i).Name, myMemberInfo(i).MemberType)
Next i
Catch e As SecurityException
Console.WriteLine(("Exception : " + e.Message.ToString()))
End Try
End Sub
End Class
Uwagi
Składowe obejmują właściwości, metody, konstruktory, pola, zdarzenia i typy zagnieżdżone.
W programie .NET 6 i starszych wersjach GetMembers metoda nie zwraca elementów członkowskich w określonej kolejności, takiej jak kolejność alfabetyczna lub deklaracja. Kod nie może zależeć od kolejności, w której są zwracane elementy członkowskie, ponieważ kolejność się zmienia. Jednak począwszy od platformy .NET 7 kolejność jest deterministyczna na podstawie kolejności metadanych w zestawie.
To przeciążenie metody wywołuje GetMembers(BindingFlags) przeciążenie metody z BindingFlags.Public | | BindingFlags.StaticBindingFlags.Instance(BindingFlags.PublicOr
BindingFlags.InstanceOr
BindingFlags.Static w Visual Basic). Nie znajdzie inicjatorów klas (konstruktorów statycznych). Aby znaleźć inicjatory klas, wywołaj GetMembers(BindingFlags) przeciążenie i określ | BindingFlags.NonPublicBindingFlags.Static(BindingFlags.StaticOr
BindingFlags.NonPublic w Visual Basic). Inicjator klasy można również pobrać przy użyciu TypeInitializer właściwości .
W poniższej tabeli przedstawiono, które elementy członkowskie klasy bazowej są zwracane przez Get
metody podczas odzwierciedlania typu.
Typ elementu członkowskiego | Static | Niestatyczna |
---|---|---|
Konstruktor | Nie | Nie |
Pole | Nie | Tak. Pole jest zawsze ukryte przez nazwę i podpis. |
Zdarzenie | Nie dotyczy | Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej. |
Metoda | Nie | Tak. Metodą (zarówno wirtualną, jak i niewirtualną) może być ukrycie przez nazwę lub przez nazwę i podpis. |
Typu zagnieżdżony | Nie | Nie |
Właściwość | Nie dotyczy | Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej. |
Ukrycie przez nazwę i podpis dotyczy wszystkich części podpisu, w tym modyfikatorów niestandardowych, zwraca typy, typy parametrów, wartowników i niezarządzane konwencje wywoływania. To jest porównanie binarne.
W celu odbicia właściwości i zdarzenia są ukrywane przez nazwę i podpis. Jeśli istnieje właściwość z akcesorem pobierania i ustawiania w klasie bazowej, ale odziedziczona klasa ma tylko akcesor pobierania, właściwość klasy odziedziczonej ukrywa właściwości klasy bazowej, a nie można uzyskać dostępu do metody ustawiającej w klasie bazowej.
Atrybuty niestandardowe nie są częścią wspólnego typu systemowego.
Jeśli bieżący Type reprezentuje skonstruowany typ ogólny, ta metoda zwraca MemberInfo obiekty z parametrami typu zastąpionymi przez odpowiednie argumenty typu.
Jeśli bieżący Type reprezentuje parametr typu w definicji typu ogólnego lub metody ogólnej, ta metoda przeszukuje składowe ograniczenia klasy lub składowych Object , jeśli nie ma ograniczenia klasy.
Zobacz też
- MemberInfo
- GetMember(String)
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)