C# Auf das Backing Field einer privaten Eigenschaft per Unsafe Accessor zugreifen
Mit UnsafeAccessorAttribute in .NET 8 auf die automatisch generierten Backing Fields privater Auto-Properties in C# zugreifen, ohne Reflection.
Eine weniger bekannte Funktion des UnsafeAccessorAttribute ist, dass es auch den Zugriff auf die automatisch generierten Backing Fields von Auto-Properties erlaubt, also Felder mit unaussprechlichen Namen.
Der Zugriff erfolgt sehr ähnlich wie auf gewöhnliche Felder. Der einzige Unterschied liegt im Muster des Mitgliedsnamens, der so aussieht:
<MyProperty>k__BackingField
Nehmen wir folgende Klasse als Beispiel:
class Foo
{
private string InstanceProperty { get; set; } = "instance-property";
}
Unten sehen Sie den Unsafe Accessor für das Backing Field dieser Eigenschaft sowie Beispiele dafür, wie das private Backing Field gelesen und sein Wert geändert wird.
[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.