Type.GetMembers Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá členy (vlastnosti, metody, pole, události atd.) aktuálního Type.
Přetížení
| Name | Description |
|---|---|
| GetMembers(BindingFlags) |
Při přepsání v odvozené třídě vyhledá členy definované pro aktuální Type, pomocí zadaných vazeb omezení. |
| GetMembers() |
Vrátí všechny veřejné členy aktuálního Type. |
GetMembers(BindingFlags)
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
Při přepsání v odvozené třídě vyhledá členy definované pro aktuální Type, pomocí zadaných vazeb omezení.
public:
abstract cli::array <System::Reflection::MemberInfo ^> ^ GetMembers(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public abstract System.Reflection.MemberInfo[] GetMembers(System.Reflection.BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public abstract System.Reflection.MemberInfo[] GetMembers(System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.MemberInfo[] GetMembers(System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member GetMembers : System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
abstract member GetMembers : System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
abstract member GetMembers : System.Reflection.BindingFlags -> System.Reflection.MemberInfo[]
Public MustOverride Function GetMembers (bindingAttr As BindingFlags) As MemberInfo()
Parametry
- bindingAttr
- BindingFlags
Bitové kombinace hodnot výčtu, které určují způsob provedení hledání.
nebo
Default pro vrácení prázdného pole.
Návraty
Pole MemberInfo objektů představujících všechny členy definované pro aktuální Type , které odpovídají zadaným omezením vazby.
nebo
Prázdné pole, pokud nejsou definovány žádné členy pro aktuální Type, nebo pokud žádný z definovaných členů neodpovídá omezením vazby.
Implementuje
- Atributy
Příklady
Následující příklad kódu ukazuje, jak použít GetMembers(BindingFlags) přetížení metody ke shromažďování informací o všech veřejných instancí členy zadané třídy.
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
Poznámky
Mezi členy patří vlastnosti, metody, konstruktory, pole, události a vnořené typy.
GetMethods(BindingFlags) Aby přetížení úspěšně načetl informace o metodě, bindingAttr musí argument obsahovat alespoň jeden z BindingFlags.Instance a BindingFlags.Static, spolu s alespoň jedním z BindingFlags.NonPublic a BindingFlags.Public. Jedinou výjimkou je volání metody s BindingFlags.NonPublic, která vrací členské informace o vnořených typech.
BindingFlags Následující příznaky filtru lze použít k definování členů, které mají být zahrnuty do vyhledávání:
Zadejte
BindingFlags.Instance, aby zahrnovaly metody instance.Zadejte
BindingFlags.Static, aby zahrnovaly statické metody.Zadejte
BindingFlags.Public, aby byly do vyhledávání zahrnuty veřejné metody.Zadejte
BindingFlags.NonPublic, aby do vyhledávání byly zahrnuty neveřejné metody (tj. soukromé, interní a chráněné metody). Vrátí se pouze chráněné a interní metody základních tříd; privátní metody v základních třídách se nevrácejí.Určete
BindingFlags.FlattenHierarchy, aby se zahrnulypublicaprotectedstatické členy v hierarchii; aleprivatestatické členy v zděděných třídách nejsou zahrnuty.Zadejte
BindingFlags.Defaultsamostatně, aby se vrátilo prázdné MethodInfo pole.
Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:
-
BindingFlags.DeclaredOnlyhledat pouze členy deklarované na Type, nikoli členy, které byly jednoduše zděděny.
Další informace naleznete na System.Reflection.BindingFlags.
V .NET 6 a starších verzích GetMembers metoda nevrací členy v určitém pořadí, jako je abecední pořadí nebo pořadí deklarací. Váš kód nesmí záviset na pořadí, ve kterém se členové vrátí, protože se tato objednávka liší. Od .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.
Chcete-li získat inicializátor třídy (statický konstruktor) pomocí tohoto přetížení metody, musíte zadat BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic v jazyce Visual Basic). Inicializátor třídy můžete také získat pomocí TypeInitializer vlastnosti.
Pokud aktuální Type představuje vytvořený obecný typ, tato metoda vrátí MemberInfo objekty s parametry typu nahrazené příslušnými argumenty typu.
Pokud aktuální Type představuje parametr typu v definici obecného typu nebo obecné metody, tato metoda vyhledá členy omezení třídy nebo členy Object , pokud neexistuje žádné omezení třídy.
Viz také
- MemberInfo
- BindingFlags
- DefaultBinder
- GetMember(String)
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)
Platí pro
GetMembers()
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
Vrátí všechny veřejné členy aktuálního Type.
public:
cli::array <System::Reflection::MemberInfo ^> ^ GetMembers();
public:
virtual cli::array <System::Reflection::MemberInfo ^> ^ GetMembers();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public System.Reflection.MemberInfo[] GetMembers();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public System.Reflection.MemberInfo[] GetMembers();
public System.Reflection.MemberInfo[] GetMembers();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.GetMembers : unit -> System.Reflection.MemberInfo[]
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.GetMembers : unit -> System.Reflection.MemberInfo[]
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()
Návraty
Pole MemberInfo objektů představujících všechny veřejné členy aktuálního Typeobjektu .
nebo
Prázdné pole typu MemberInfo, pokud aktuální Type nemá veřejné členy.
Implementuje
- Atributy
Příklady
Následující příklad kódu ukazuje, jak použít GetMembers() přetížení metody ke shromažďování informací o všech veřejných členech zadané třídy.
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
Poznámky
Mezi členy patří vlastnosti, metody, konstruktory, pole, události a vnořené typy.
V .NET 6 a starších verzích GetMembers metoda nevrací členy v určitém pořadí, jako je abecední pořadí nebo pořadí deklarací. Váš kód nesmí záviset na pořadí, ve kterém se členové vrátí, protože se tato objednávka liší. Od .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.
Toto přetížení metody volá GetMembers(BindingFlags) přetížení metody sBindingFlags.InstanceBindingFlags.Static | BindingFlags.Public | (BindingFlags.StaticBindingFlags.PublicOrBindingFlags.InstanceOr v jazyce Visual Basic). Nenajde inicializátory tříd (statické konstruktory). Chcete-li najít inicializátory třídy, zavolejte GetMembers(BindingFlags) přetížení a zadejte | BindingFlags.NonPublicBindingFlags.Static(BindingFlags.StaticOrBindingFlags.NonPublic v jazyce Visual Basic). Inicializátor třídy můžete také získat pomocí TypeInitializer vlastnosti.
Následující tabulka ukazuje, jaké členy základní třídy jsou vráceny metodami Get při reflexi typu.
| Typ členu | Statický. | Nestatické |
|---|---|---|
| Konstruktor | Ne | Ne |
| Pole | Ne | Ano. Pole se vždy skryje podle názvu a signatury. |
| Zvláštní událost | Není relevantní | Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže. |
| Metoda | Ne | Ano. Metodu (virtuální i ne virtuální) lze skrýt podle názvu nebo skrýt podle názvu a podpisu. |
| Vnořený typ | Ne | Ne |
| Vlastnictví | Není relevantní | Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže. |
Funkce skrytí podle jména a podpisu zohledňuje všechny části podpisu, včetně vlastních modifikátorů, návratových typů, typů parametrů, sentinelů a nespravovaných konvencí volání. Jedná se o binární porovnání.
Pro reflexi jsou vlastnosti a události skryty podle názvu a podpisu. Pokud máte vlastnost s oběma přístupovými metodami get i set v základní třídě, ale odvozená třída má pouze přístupovou metodu get, odvozená třída překryje vlastnost základní třídy a nebudete mít přístup k nastavovací metodě základní třídy.
Vlastní atributy nejsou součástí systému běžných typů.
Pokud aktuální Type představuje vytvořený obecný typ, tato metoda vrátí MemberInfo objekty s parametry typu nahrazené příslušnými argumenty typu.
Pokud aktuální Type představuje parametr typu v definici obecného typu nebo obecné metody, tato metoda vyhledá členy omezení třídy nebo členy Object , pokud neexistuje žádné omezení třídy.
Viz také
- MemberInfo
- GetMember(String)
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)