Type.GetFields Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene i campi dell'oggetto corrente Type.
Overload
| Nome | Descrizione |
|---|---|
| GetFields() |
Restituisce tutti i campi pubblici dell'oggetto corrente Type. |
| GetFields(BindingFlags) |
In caso di override in una classe derivata, cerca i campi definiti per l'oggetto corrente Typeusando i vincoli di associazione specificati. |
GetFields()
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
Restituisce tutti i campi pubblici dell'oggetto corrente 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()
Valori restituiti
Matrice di FieldInfo oggetti che rappresentano tutti i campi pubblici definiti per l'oggetto corrente Type.
oppure
Matrice vuota di tipo FieldInfo, se non sono definiti campi pubblici per l'oggetto corrente Type.
Implementazioni
- Attributi
Esempio
Nell'esempio seguente viene illustrato l'utilizzo del GetFields() metodo .
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
Commenti
In .NET 6 e versioni precedenti, il metodo GetFields non restituisce campi in un ordine specifico, ad esempio ordine alfabetico o di dichiarazione. Il codice non deve dipendere dall'ordine in cui vengono restituiti i campi, perché tale ordine varia. Tuttavia, a partire da .NET 7, l'ordinamento è deterministico in base all'ordinamento dei metadati nell'assembly.
Nella tabella seguente vengono illustrati i membri della classe base restituiti dai Get metodi quando si analizza un tipo.
| Tipo di membro | Static | Non statico |
|---|---|---|
| Costruttore | No | No |
| Campo | No | Yes. Un campo è sempre nascosto per nome e firma. |
| Event | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito. |
| metodo | No | Yes. Un metodo (virtuale e non virtuale) può essere nascosto per nome o nascosto per nome e firma. |
| Tipo annidato | No | No |
| Proprietà | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito. |
Hide-by-name-and-signature considera tutte le parti della firma, inclusi modificatori personalizzati, tipi restituiti, tipi di parametro, sentinel e convenzioni di chiamata non gestite. Si tratta di un confronto binario.
In riflessione, le proprietà e gli eventi sono hide-by-name-and-signature. Se si dispone di una proprietà con una funzione di accesso get e set nella classe base, ma la classe derivata ha solo una funzione di accesso get, la proprietà della classe derivata nasconde la proprietà della classe base e non sarà possibile accedere al setter nella classe base.
Gli attributi personalizzati non fanno parte del sistema di tipi comune.
Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce gli FieldInfo oggetti con i parametri di tipo sostituiti dagli argomenti di tipo appropriati.
Se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o di un metodo generico, questo metodo cerca i campi pubblici del vincolo di classe.
Vedi anche
Si applica a
GetFields(BindingFlags)
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
In caso di override in una classe derivata, cerca i campi definiti per l'oggetto corrente Typeusando i vincoli di associazione specificati.
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()
Parametri
- bindingAttr
- BindingFlags
Combinazione bit per bit dei valori di enumerazione che specificano come viene eseguita la ricerca.
oppure
Default per restituire una matrice vuota.
Valori restituiti
Matrice di oggetti che rappresentano tutti i campi definiti per l'oggetto corrente FieldInfo che corrispondono ai vincoli di Type associazione specificati.
oppure
Matrice vuota di tipo FieldInfo, se non sono definiti campi per l'oggetto corrente Typeo se nessuno dei campi definiti corrisponde ai vincoli di associazione.
Implementazioni
- Attributi
Esempio
Nell'esempio seguente viene illustrato l'utilizzo del GetFields(BindingFlags) metodo .
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
Commenti
Affinché l'overload GetFields(BindingFlags) recuperi correttamente le informazioni sulle proprietà, l'argomento bindingAttr deve includere almeno uno di BindingFlags.Instance e BindingFlags.Static, insieme ad almeno uno di BindingFlags.NonPublic e BindingFlags.Public.
I flag di filtro seguenti BindingFlags possono essere usati per definire i campi da includere nella ricerca:
Specificare
BindingFlags.Instanceper includere i metodi di istanza.Specificare
BindingFlags.Staticper includere metodi statici.Specificare
BindingFlags.Publicper includere i campi pubblici nella ricerca.Specificare
BindingFlags.NonPublicdi includere campi non pubblici (ovvero campi privati, interni e protetti) nella ricerca. Vengono restituiti solo campi protetti e interni sulle classi di base; i campi privati sulle classi di base non vengono restituiti.Specificare
BindingFlags.FlattenHierarchydi includerepubliceprotectedmembri statici nella gerarchia.privateI membri statici nelle classi ereditate non sono inclusi.Specificare
BindingFlags.Defaultda solo per restituire una matrice vuota PropertyInfo .
Per modificare il funzionamento della ricerca, è possibile usare i flag di modificatore seguenti BindingFlags :
-
BindingFlags.DeclaredOnlyper cercare solo i campi dichiarati in Type, non i campi semplicemente ereditati.
Per altre informazioni, vedere System.Reflection.BindingFlags.
In .NET 6 e versioni precedenti, il metodo GetFields non restituisce campi in un ordine specifico, ad esempio ordine alfabetico o di dichiarazione. Il codice non deve dipendere dall'ordine in cui vengono restituiti i campi, perché tale ordine varia. Tuttavia, a partire da .NET 7, l'ordinamento è deterministico in base all'ordinamento dei metadati nell'assembly.
Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce gli FieldInfo oggetti con i parametri di tipo sostituiti dagli argomenti di tipo appropriati.
Se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o di un metodo generico, questo metodo cerca i campi pubblici del vincolo di classe.