logo
ReferenciaAPI

CampoOPropiedad

Abstracción de reflexión para leer y escribir campos y propiedades de C#.

CampoOPropiedad

CampoOPropiedad encapsula un FieldInfo o un PropertyInfo y ofrece una interfaz común para inspeccionar y modificar miembros de una instancia.

Es una utilidad de infraestructura. El código de gameplay normal no necesita utilizarla directamente.

Para qué existe

Eco necesita resolver miembros de tipos dinámicamente en varias partes de su infraestructura, especialmente cuando la información llega desde estructuras serializadas o código que debe trabajar con tipos desconocidos en compilación.

Tipo C#

Reflection

CampoOPropiedad
  ├── FieldInfo
  └── PropertyInfo

Lectura

var miembro = objeto.GetFieldOrProperty("vida");
int vida = miembro.GetValue<int>(objeto);

También existe el acceso directo mediante las extensiones:

int vida = objeto.GetFieldOrPropertyValue<int>("vida");

Escritura

objeto.SetFieldOrPropertyValue("vida", 100);

CampoOPropiedad comprueba si el miembro es escribible antes de modificarlo y utiliza Serializacion.ConvertObject para convertir el valor al tipo esperado cuando sea posible.

Metadatos

La abstracción expone:

PropiedadSignificado
nameNombre del campo o propiedad.
canWriteIndica si puede modificarse.
typeTipo declarado del miembro.
fieldFieldInfo subyacente, si existe.
propertyPropertyInfo subyacente, si existe.

También permite consultar atributos:

bool serializable = miembro.HasAttribute<MiAtributo>();
MiAtributo atributo = miembro.GetAttribute<MiAtributo>();

Caché de reflexión

Las extensiones GetFieldOrProperty mantienen una caché por tipo y nombre. Esto evita repetir la búsqueda por reflexión cada vez que una ruta dinámica necesita acceder al mismo miembro.

Primera consulta

Reflection

CampoOPropiedad

Cache[type][name]

Consultas posteriores

Cache

No es una optimización gratuita

La reflexión sigue teniendo un coste y la caché consume memoria. No conviene sustituir accesos directos de gameplay por reflexión simplemente porque CampoOPropiedad exista.

Referencias

Serialización

Conversión de valores utilizada por la infraestructura de reflexión.

Código fuente

Implementación actual de CampoOPropiedad.

On this page