Start Debugging

C# Acceder al campo de respaldo de una propiedad privada usando Unsafe Accessor

Usa UnsafeAccessorAttribute en .NET 8 para acceder a los campos de respaldo autogenerados de propiedades automáticas privadas en C# sin reflexión.

Una característica poco conocida de UnsafeAccessorAttribute es que también permite acceder a los campos de respaldo autogenerados de propiedades automáticas, campos con nombres impronunciables.

La forma de acceder a ellos es muy similar a la de acceder a los campos, con la única diferencia del patrón del nombre del miembro, que se ve así:

<MyProperty>k__BackingField

Tomemos la siguiente clase como ejemplo:

class Foo
{
    private string InstanceProperty { get; set; } = "instance-property";
}

A continuación tienes el unsafe accessor para el campo de respaldo de esta propiedad y ejemplos de cómo leer el campo de respaldo privado y cómo modificar su valor.

[UnsafeAccessor(UnsafeAccessorKind.Field, Name = "<InstanceProperty>k__BackingField")]
extern static ref string InstancePropertyBackingField(Foo @this);

var instance = new Foo();

// Read
_ = InstancePropertyBackingField(instance);

// Modify
InstancePropertyBackingField(instance) = Guid.NewGuid().ToString();

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Volver