C# Wie Sie ein readonly-Feld mit UnsafeAccessor aktualisieren
Erfahren Sie, wie Sie in C# ein readonly-Feld mit UnsafeAccessor aktualisieren, einer Alternative zu Reflection ohne deren Performance-Nachteil. Verfügbar in .NET 8.
Unsafe Accessors können verwendet werden, um auf private Member einer Klasse zuzugreifen, genauso wie Sie es mit Reflection tun würden. Dasselbe gilt für das Ändern des Werts eines readonly-Feldes.
Nehmen wir die folgende Klasse an:
class Foo
{
public readonly int readonlyField = 3;
}
Angenommen, Sie möchten aus irgendeinem Grund den Wert dieses Read-Only-Feldes ändern. Mit Reflection war das natürlich schon vorher möglich:
var instance = new Foo();
typeof(Foo)
.GetField("readonlyField", BindingFlags.Instance | BindingFlags.Public)
.SetValue(instance, 42);
Console.WriteLine(instance.readonlyField); // 42
Dasselbe lässt sich aber auch mit UnsafeAccessorAttribute erreichen, ohne den Performance-Nachteil von Reflection. Das Modifizieren von readonly-Feldern unterscheidet sich bei Unsafe Accessors nicht vom Modifizieren eines anderen Feldes.
var instance = new Foo();
[UnsafeAccessor(UnsafeAccessorKind.Field, Name = "readonlyField")]
extern static ref int ReadonlyField(Foo @this);
ReadonlyField(instance) = 42;
Console.WriteLine(instance.readonlyField); // 42
Dieser Code ist auch auf GitHub verfügbar, falls Sie ihn ausprobieren möchten.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.