C# Cómo actualizar un campo readonly usando UnsafeAccessor
Aprende a actualizar un campo readonly en C# usando UnsafeAccessor, una alternativa a la reflexión sin la penalización de rendimiento. Disponible en .NET 8.
Los unsafe accessors se pueden usar para acceder a miembros privados de una clase, igual que harías con reflexión. Y lo mismo se puede decir sobre cambiar el valor de un campo readonly.
Supongamos la siguiente clase:
class Foo
{
public readonly int readonlyField = 3;
}
Imagina que por alguna razón quieres cambiar el valor de ese campo de solo lectura. Ya podías hacerlo con reflexión, por supuesto:
var instance = new Foo();
typeof(Foo)
.GetField("readonlyField", BindingFlags.Instance | BindingFlags.Public)
.SetValue(instance, 42);
Console.WriteLine(instance.readonlyField); // 42
Pero lo mismo se puede lograr usando UnsafeAccessorAttribute sin la penalización de rendimiento asociada a la reflexión. Modificar campos readonly no es diferente de modificar cualquier otro campo cuando se trata de unsafe accessors.
var instance = new Foo();
[UnsafeAccessor(UnsafeAccessorKind.Field, Name = "readonlyField")]
extern static ref int ReadonlyField(Foo @this);
ReadonlyField(instance) = 42;
Console.WriteLine(instance.readonlyField); // 42
Este código también está disponible en GitHub por si quieres probarlo.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.