Type.GetFields 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á pole aktuálního Type.
Přetížení
| Name | Description |
|---|---|
| GetFields() |
Vrátí všechna veřejná pole aktuálního Type. |
| GetFields(BindingFlags) |
Při přepsání v odvozené třídě vyhledá pole definovaná pro aktuální Type, pomocí zadaných omezení vazby. |
GetFields()
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
Vrátí všechna veřejná pole aktuálního Type.
public:
cli::array <System::Reflection::FieldInfo ^> ^ GetFields();
public:
virtual cli::array <System::Reflection::FieldInfo ^> ^ GetFields();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]
public System.Reflection.FieldInfo[] GetFields();
public System.Reflection.FieldInfo[] GetFields();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)>]
member this.GetFields : unit -> System.Reflection.FieldInfo[]
member this.GetFields : unit -> System.Reflection.FieldInfo[]
abstract member GetFields : unit -> System.Reflection.FieldInfo[]
override this.GetFields : unit -> System.Reflection.FieldInfo[]
Public Function GetFields () As FieldInfo()
Návraty
Pole FieldInfo objektů představujících všechna veřejná pole definovaná pro aktuální Type.
nebo
Prázdné pole typu FieldInfo, pokud nejsou pro aktuální Typepole definována žádná veřejná pole .
Implementuje
- Atributy
Příklady
Následující příklad ukazuje použití GetFields() metody.
using System;
using System.Reflection;
using System.ComponentModel.Design;
class FieldInfo_IsSpecialName
{
public static void Main()
{
try
{
// Get the type handle of a specified class.
Type myType = typeof(ViewTechnology);
// Get the fields of the specified class.
FieldInfo[] myField = myType.GetFields();
Console.WriteLine("\nDisplaying fields that have SpecialName attributes:\n");
for(int i = 0; i < myField.Length; i++)
{
// Determine whether or not each field is a special name.
if(myField[i].IsSpecialName)
{
Console.WriteLine("The field {0} has a SpecialName attribute.",
myField[i].Name);
}
}
}
catch(Exception e)
{
Console.WriteLine("Exception : {0} " , e.Message);
}
}
}
open System.ComponentModel.Design
try
// Get the type handle of a specified class.
let myType = typeof<ViewTechnology>
// Get the fields of the specified class.
let myFields = myType.GetFields()
printfn $"\nDisplaying fields that have SpecialName attributes:\n"
for field in myFields do
// Determine whether or not each field is a special name.
if field.IsSpecialName then
printfn $"The field {field.Name} has a SpecialName attribute."
with e ->
printfn $"Exception : {e.Message} "
Imports System.Reflection
Imports System.ComponentModel.Design
Class FieldInfo_IsSpecialName
Public Shared Sub Main()
Try
' Get the type handle of a specified class.
Dim myType As Type = GetType(ViewTechnology)
' Get the fields of a specified class.
Dim myField As FieldInfo() = myType.GetFields()
Console.WriteLine(ControlChars.Cr + "Displaying fields that have SpecialName attributes:" + ControlChars.Cr)
Dim i As Integer
For i = 0 To myField.Length - 1
' Determine whether or not each field is a special name.
If myField(i).IsSpecialName Then
Console.WriteLine("The field {0} has a SpecialName attribute.", myField(i).Name)
End If
Next i
Catch e As Exception
Console.WriteLine("Exception : {0} ", e.Message.ToString())
End Try
End Sub
End Class
Poznámky
V .NET 6 a starších verzích metoda GetFields nevrací pole 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 jsou vrácena pole, protože se toto pořadí liší. Od .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.
Následující tabulka ukazuje, jaké členy základní třídy jsou vráceny metodami Get při reflexi typu.
| Typ členu | Static | Nestatické |
|---|---|---|
| Konstruktor | No | No |
| Pole | No | Yes. Pole se vždy skryje podle názvu a signatury. |
| 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 | No | Yes. Metodu (virtuální i ne virtuální) lze skrýt podle názvu nebo skrýt podle názvu a podpisu. |
| Vnořený typ | No | No |
| 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í FieldInfo 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 hledá veřejná pole omezení třídy.
Viz také
Platí pro
GetFields(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á pole definovaná pro aktuální Type, pomocí zadaných omezení vazby.
public:
abstract cli::array <System::Reflection::FieldInfo ^> ^ GetFields(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)]
public abstract System.Reflection.FieldInfo[] GetFields(System.Reflection.BindingFlags bindingAttr);
public abstract System.Reflection.FieldInfo[] GetFields(System.Reflection.BindingFlags bindingAttr);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields)>]
abstract member GetFields : System.Reflection.BindingFlags -> System.Reflection.FieldInfo[]
abstract member GetFields : System.Reflection.BindingFlags -> System.Reflection.FieldInfo[]
Public MustOverride Function GetFields (bindingAttr As BindingFlags) As FieldInfo()
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 objektů představujících FieldInfo všechna pole definovaná pro aktuální Type pole, která odpovídají zadaným omezením vazby.
nebo
Prázdné pole typu FieldInfo, pokud nejsou pro aktuální Typepole definována žádná pole nebo pokud žádná z definovaných polí neodpovídá omezením vazby.
Implementuje
- Atributy
Příklady
Následující příklad ukazuje použití GetFields(BindingFlags) metody.
using System;
using System.Reflection;
class AttributesSample
{
public void Mymethod (int int1m, out string str2m, ref string str3m)
{
str2m = "in Mymethod";
}
public static int Main(string[] args)
{
Console.WriteLine ("Reflection.MethodBase.Attributes Sample");
// Get the type.
Type MyType = Type.GetType("AttributesSample");
// Get the method Mymethod on the type.
MethodBase Mymethodbase = MyType.GetMethod("Mymethod");
// Display the method name.
Console.WriteLine("Mymethodbase = " + Mymethodbase);
// Get the MethodAttribute enumerated value.
MethodAttributes Myattributes = Mymethodbase.Attributes;
// Display the flags that are set.
PrintAttributes(typeof(System.Reflection.MethodAttributes), (int) Myattributes);
return 0;
}
public static void PrintAttributes(Type attribType, int iAttribValue)
{
if (!attribType.IsEnum)
{
Console.WriteLine("This type is not an enum.");
return;
}
FieldInfo[] fields = attribType.GetFields(BindingFlags.Public | BindingFlags.Static);
for (int i = 0; i < fields.Length; i++)
{
int fieldvalue = (int)fields[i].GetValue(null);
if ((fieldvalue & iAttribValue) == fieldvalue)
{
Console.WriteLine(fields[i].Name);
}
}
}
}
open System
open System.Reflection
type AttributesSample() =
member _.Mymethod(int1m: int, str2m: string outref, str3m: string byref) =
str2m <- "in Mymethod"
let printAttributes (attribType: Type) iAttribValue =
if not attribType.IsEnum then
printfn "This type is not an enum."
else
let fields = attribType.GetFields(BindingFlags.Public ||| BindingFlags.Static)
for f in fields do
let fieldvalue = f.GetValue null :?> int
if fieldvalue &&& iAttribValue = fieldvalue then
printfn $"{f.Name}"
printfn "Reflection.MethodBase.Attributes Sample"
// Get the type.
let MyType = Type.GetType "AttributesSample"
// Get the method Mymethod on the type.
let Mymethodbase = MyType.GetMethod "Mymethod"
// Display the method name.
printfn $"Mymethodbase = {Mymethodbase}"
// Get the MethodAttribute enumerated value.
let Myattributes = Mymethodbase.Attributes
// Display the flags that are set.
printAttributes typeof<MethodAttributes> (int Myattributes)
Imports System.Reflection
Class AttributesSample
Public Sub Mymethod(ByVal int1m As Integer, ByRef str2m As String, ByRef str3m As String)
str2m = "in Mymethod"
End Sub
Public Shared Function Main(ByVal args() As String) As Integer
Console.WriteLine("Reflection.MethodBase.Attributes Sample")
' Get the type.
Dim MyType As Type = Type.GetType("AttributesSample")
' Get the method Mymethod on the type.
Dim Mymethodbase As MethodBase = MyType.GetMethod("Mymethod")
' Display the method name.
Console.WriteLine("Mymethodbase = {0}.", Mymethodbase)
' Get the MethodAttribute enumerated value.
Dim Myattributes As MethodAttributes = Mymethodbase.Attributes
' Display the flags that are set.
PrintAttributes(GetType(System.Reflection.MethodAttributes), CInt(Myattributes))
Return 0
End Function 'Main
Public Shared Sub PrintAttributes(ByVal attribType As Type, ByVal iAttribValue As Integer)
If Not attribType.IsEnum Then
Console.WriteLine("This type is not an enum.")
Return
End If
Dim fields As FieldInfo() = attribType.GetFields((BindingFlags.Public Or BindingFlags.Static))
Dim i As Integer
For i = 0 To fields.Length - 1
Dim fieldvalue As Integer = CType(fields(i).GetValue(Nothing), Int32)
If (fieldvalue And iAttribValue) = fieldvalue Then
Console.WriteLine(fields(i).Name)
End If
Next i
End Sub
End Class
Poznámky
GetFields(BindingFlags) Aby přetížení úspěšně načetl informace o vlastnosti, bindingAttr musí argument obsahovat alespoň jeden z BindingFlags.Instance aspoň BindingFlags.Staticjednoho z a nejméně jednoho z BindingFlags.NonPublic a BindingFlags.Public.
BindingFlags Následující příznaky filtru lze použít k definování polí, která mají být zahrnuta do hledání:
Zadejte
BindingFlags.Instance, aby zahrnovaly metody instance.Zadejte
BindingFlags.Static, aby zahrnovaly statické metody.Zadejte
BindingFlags.Public, aby se do hledání zahrnula veřejná pole.Zadejte
BindingFlags.NonPublic, aby se do hledání zahrnula neveřejná pole (tj. soukromá, interní a chráněná pole). Vrátí se pouze chráněná a interní pole na základních třídách; privátní pole 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é PropertyInfo pole.
Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:
-
BindingFlags.DeclaredOnlyprohledávat pouze pole deklarovaná v Typepoli , nikoli pole, která byla jednoduše zděděna.
Další informace naleznete na System.Reflection.BindingFlags.
V .NET 6 a starších verzích metoda GetFields nevrací pole 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 jsou vrácena pole, protože se toto pořadí liší. Od .NET 7 je však řazení deterministické na základě pořadí metadat v sestavení.
Pokud aktuální Type představuje vytvořený obecný typ, tato metoda vrátí FieldInfo 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 hledá veřejná pole omezení třídy.