Type.GetMembers Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar medlemmarna (egenskaper, metoder, fält, händelser och så vidare) för den aktuella Type.
Överlagringar
| Name | Description |
|---|---|
| GetMembers() |
Returnerar alla offentliga medlemmar i den aktuella Type. |
| GetMembers(BindingFlags) |
När du åsidosättas i en härledd klass söker du efter de medlemmar som definierats för den aktuella Type, med hjälp av de angivna bindningsbegränsningarna. |
GetMembers()
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
Returnerar alla offentliga medlemmar i den aktuella 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()
Returer
En matris med MemberInfo objekt som representerar alla offentliga medlemmar i den aktuella Type.
-eller-
En tom matris av typen MemberInfo, om den aktuella Type inte har offentliga medlemmar.
Implementeringar
- Attribut
Exempel
Följande kodexempel visar hur du använder metodöverbelastningen GetMembers() för att samla in information om alla offentliga medlemmar i en angiven klass.
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
Kommentarer
Medlemmar inkluderar egenskaper, metoder, konstruktorer, fält, händelser och kapslade typer.
I .NET 6 och tidigare versioner returnerar metoden GetMembers inte medlemmar i en viss ordning, till exempel alfabetisk ordning eller deklarationsordning. Koden får inte vara beroende av i vilken ordning medlemmar returneras, eftersom den ordningen varierar. Från och med .NET 7 är ordningen deterministisk baserat på metadataordningen i sammansättningen.
Den här metoden överbelastar metoden GetMembers(BindingFlags) med BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static (BindingFlags.PublicOrBindingFlags.InstanceOrBindingFlags.Static i Visual Basic). Den hittar inte klassinitierare (statiska konstruktorer). Om du vill hitta klassinitierare anropar du överlagringen GetMembers(BindingFlags) och anger BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic i Visual Basic). Du kan också hämta klassinitieraren med hjälp av TypeInitializer egenskapen .
I följande tabell visas vilka medlemmar i en basklass som returneras av metoderna när de Get reflekterar över en typ.
| Medlemstyp | Static | Icke-statisk |
|---|---|---|
| Constructor | No | No |
| Fält | No | Yes. Ett fält är alltid dolt genom namn och signatur (hide-by-name-and-signature). |
| Händelse | Ej tillämpligt | Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan. |
| Metod | No | Yes. En metod (både virtuell och icke-virtuell) kan vara hide-by-name eller hide-by-name-and-signature. |
| Kapslad typ | No | No |
| Fastighet | Ej tillämpligt | Den vanliga typen av systemregel är att arvet är detsamma som för de metoder som implementerar egenskapen. Reflektion behandlar egenskaper som hide-by-name-and-signature. Se anmärkning 2 nedan. |
Dölj efter namn och signatur tar hänsyn till alla delar av signaturen, inklusive anpassade modifierare, returtyper, parametertyper, sentinels och ohanterade anropskonventioner. Det här är en binär jämförelse.
För reflektion är egenskaper och händelser dolda genom namn och signatur. Om du har en egenskap med både en get- och en set-accessor i basklassen, men den härledda klassen bara har en get-accessor, döljer egenskapen i den härledda klassen basklassegenskapen och du kommer inte att kunna komma åt set-accessorn i basklassen.
Anpassade attribut ingår inte i det vanliga typsystemet.
Om strömmen Type representerar en konstruerad allmän typ returnerar den här metoden objekten MemberInfo med typparametrarna ersatta av lämpliga typargument.
Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom medlemmarna i klassbegränsningen eller medlemmarna Object i om det inte finns någon klassbegränsning.
Se även
- MemberInfo
- GetMember(String)
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)
Gäller för
GetMembers(BindingFlags)
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
- Källa:
- Type.cs
När du åsidosättas i en härledd klass söker du efter de medlemmar som definierats för den aktuella Type, med hjälp av de angivna bindningsbegränsningarna.
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()
Parametrar
- bindingAttr
- BindingFlags
En bitvis kombination av uppräkningsvärdena som anger hur sökningen ska utföras.
-eller-
Default för att returnera en tom matris.
Returer
En matris med MemberInfo objekt som representerar alla medlemmar som definierats för den aktuella Type som matchar de angivna bindningsbegränsningarna.
-eller-
En tom matris om inga medlemmar har definierats för den aktuella Type, eller om ingen av de definierade medlemmarna matchar bindningsbegränsningarna.
Implementeringar
- Attribut
Exempel
I följande kodexempel visas hur du använder metodöverlagringen GetMembers(BindingFlags) för att samla in information om alla medlemmar i en angiven klass.
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
Kommentarer
Medlemmar inkluderar egenskaper, metoder, konstruktorer, fält, händelser och kapslade typer.
För att överlagringen GetMethods(BindingFlags) ska kunna hämta metodinformation bindingAttr måste argumentet innehålla minst en av BindingFlags.Instance och BindingFlags.Static, tillsammans med minst en av BindingFlags.NonPublic och BindingFlags.Public. Det enda undantaget är ett metodanrop med BindingFlags.NonPublic, som returnerar medlemsinformation om kapslade typer.
Följande BindingFlags filterflaggor kan användas för att definiera vilka medlemmar som ska inkluderas i sökningen:
Ange
BindingFlags.Instanceatt instansmetoder ska inkluderas.Ange
BindingFlags.Staticatt statiska metoder ska inkluderas.Ange
BindingFlags.Publicatt offentliga metoder ska inkluderas i sökningen.Ange
BindingFlags.NonPublicatt icke-offentliga metoder (dvs. privata, interna och skyddade metoder) ska inkluderas i sökningen. Endast skyddade och interna metoder för basklasser returneras. privata metoder för basklasser returneras inte.Ange
BindingFlags.FlattenHierarchyatt inkluderapublicochprotectedstatiska medlemmar i hierarkin.privateStatiska medlemmar i ärvda klasser ingår inte.Ange
BindingFlags.Defaultensam för att returnera en tom MethodInfo matris.
Följande BindingFlags modifierarflaggor kan användas för att ändra hur sökningen fungerar:
-
BindingFlags.DeclaredOnlyom du bara vill söka efter de medlemmar som deklarerats på Type, inte medlemmar som helt enkelt ärvts.
Mer information finns i System.Reflection.BindingFlags.
I .NET 6 och tidigare versioner returnerar metoden GetMembers inte medlemmar i en viss ordning, till exempel alfabetisk ordning eller deklarationsordning. Koden får inte vara beroende av i vilken ordning medlemmar returneras, eftersom den ordningen varierar. Från och med .NET 7 är ordningen deterministisk baserat på metadataordningen i sammansättningen.
Om du vill hämta klassinitieraren (statisk konstruktor) med den här metodens överlagring måste du ange BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic i Visual Basic). Du kan också hämta klassinitieraren med hjälp av TypeInitializer egenskapen .
Om strömmen Type representerar en konstruerad allmän typ returnerar den här metoden objekten MemberInfo med typparametrarna ersatta av lämpliga typargument.
Om den aktuella Type representerar en typparameter i definitionen av en allmän typ eller allmän metod söker den här metoden igenom medlemmarna i klassbegränsningen eller medlemmarna Object i om det inte finns någon klassbegränsning.
Se även
- MemberInfo
- BindingFlags
- DefaultBinder
- GetMember(String)
- GetDefaultMembers()
- FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)