Type.GetFields Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene los campos del objeto actual Type.
Sobrecargas
| Nombre | Description |
|---|---|
| GetFields() |
Devuelve todos los campos públicos del objeto actual Type. |
| GetFields(BindingFlags) |
Cuando se reemplaza en una clase derivada, busca los campos definidos para el objeto actual Typemediante las restricciones de enlace especificadas. |
GetFields()
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
Devuelve todos los campos públicos del objeto actual 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()
Devoluciones
Matriz de objetos que FieldInfo representa todos los campos públicos definidos para el objeto actual Type.
O bien
Matriz vacía de tipo FieldInfo, si no se definen campos públicos para el objeto actual Type.
Implementaciones
- Atributos
Ejemplos
En el ejemplo siguiente se muestra un uso del GetFields() método .
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
Comentarios
En .NET 6 y versiones anteriores, el método GetFields no devuelve campos en un orden determinado, como el orden alfabético o de declaración. El código no debe depender del orden en el que se devuelven los campos, ya que ese orden varía. Sin embargo, a partir de .NET 7, el orden es determinista en función del orden de metadatos del ensamblado.
En la tabla siguiente se muestra qué miembros de una clase base devuelven los métodos Get al reflexionar sobre un tipo.
| Tipo de miembro | Static | No estático |
|---|---|---|
| Constructor | No | No |
| Campo | No | Yes. Un campo siempre se oculta según el nombre y la firma. |
| Event | No aplicable | La regla del sistema de tipos común es que la herencia es igual a la de los métodos que implementan la propiedad. La reflexión trata las propiedades como hide-by-name-and-signature. Vea la nota 2 a continuación. |
| Método | No | Yes. Un método (tanto virtual como no virtual) puede ocultarse por nombre o por nombre y firma. |
| Tipo anidado | No | No |
| Propiedad | No aplicable | La regla del sistema de tipos común es que la herencia es igual a la de los métodos que implementan la propiedad. La reflexión trata las propiedades como hide-by-name-and-signature. Vea la nota 2 a continuación. |
En ocultar por nombre y firma se tienen en cuenta todas las partes de la firma, incluidos modificadores personalizados, tipos de valor devuelto, tipos de parámetros, sentinels y convenciones de llamada no administradas. Se trata de una comparación binaria.
En reflexión, las propiedades y eventos se ocultan por nombre y firma. Si tiene una propiedad con un descriptor de acceso get y set en la clase base, pero la clase derivada solo tiene un descriptor de acceso get, la propiedad de clase derivada oculta la propiedad de clase base y no podrá acceder al establecedor en la clase base.
Los atributos personalizados no forman parte del sistema de tipos común.
Si el objeto actual Type representa un tipo genérico construido, este método devuelve los objetos con los FieldInfo parámetros de tipo reemplazados por los argumentos de tipo adecuados.
Si el objeto actual Type representa un parámetro de tipo en la definición de un tipo genérico o un método genérico, este método busca en los campos públicos de la restricción de clase.
Consulte también
Se aplica a
GetFields(BindingFlags)
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
Cuando se reemplaza en una clase derivada, busca los campos definidos para el objeto actual Typemediante las restricciones de enlace especificadas.
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()
Parámetros
- bindingAttr
- BindingFlags
Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda.
O bien
Default para devolver una matriz vacía.
Devoluciones
Matriz de objetos que FieldInfo representan todos los campos definidos para el actual Type que coinciden con las restricciones de enlace especificadas.
O bien
Matriz vacía de tipo FieldInfo, si no hay campos definidos para el objeto actual Type, o si ninguno de los campos definidos coincide con las restricciones de enlace.
Implementaciones
- Atributos
Ejemplos
En el ejemplo siguiente se muestra un uso del GetFields(BindingFlags) método .
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
Comentarios
Para que la sobrecarga recupere correctamente la GetFields(BindingFlags) información de propiedad, el bindingAttr argumento debe incluir al menos uno de BindingFlags.Instance y BindingFlags.Static, junto con al menos uno de BindingFlags.NonPublic y BindingFlags.Public.
Se pueden usar las marcas de filtro siguientes BindingFlags para definir qué campos se van a incluir en la búsqueda:
Especifique
BindingFlags.Instancepara incluir métodos de instancia.Especifique
BindingFlags.Staticpara incluir métodos estáticos.Especifique
BindingFlags.Publicpara incluir campos públicos en la búsqueda.Especifique
BindingFlags.NonPublicpara incluir campos no públicos (es decir, campos privados, internos y protegidos) en la búsqueda. Solo se devuelven campos protegidos e internos en clases base; no se devuelven campos privados en clases base.Especifique
BindingFlags.FlattenHierarchypara incluirpublicyprotectedlos miembros estáticos en la jerarquía;privateno se incluyen los miembros estáticos de las clases heredadas.Especifique
BindingFlags.Defaultsolo para devolver una matriz vacía PropertyInfo .
Se pueden usar las marcas modificadores siguientes BindingFlags para cambiar el funcionamiento de la búsqueda:
-
BindingFlags.DeclaredOnlypara buscar solo los campos declarados en , Typeno los campos que simplemente se heredaron.
Consulte System.Reflection.BindingFlags para obtener más información.
En .NET 6 y versiones anteriores, el método GetFields no devuelve campos en un orden determinado, como el orden alfabético o de declaración. El código no debe depender del orden en el que se devuelven los campos, ya que ese orden varía. Sin embargo, a partir de .NET 7, el orden es determinista en función del orden de metadatos del ensamblado.
Si el objeto actual Type representa un tipo genérico construido, este método devuelve los objetos con los FieldInfo parámetros de tipo reemplazados por los argumentos de tipo adecuados.
Si el objeto actual Type representa un parámetro de tipo en la definición de un tipo genérico o un método genérico, este método busca en los campos públicos de la restricción de clase.