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
└── PropertyInfoLectura
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:
| Propiedad | Significado |
|---|---|
name | Nombre del campo o propiedad. |
canWrite | Indica si puede modificarse. |
type | Tipo declarado del miembro. |
field | FieldInfo subyacente, si existe. |
property | PropertyInfo 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
↓
CacheNo 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.
