C# Доступ к backing field приватного свойства с помощью Unsafe Accessor
Используйте UnsafeAccessorAttribute в .NET 8 для доступа к автоматически генерируемым backing field приватных авто-свойств в C# без рефлексии.
Менее известная возможность UnsafeAccessorAttribute заключается в том, что он также позволяет обращаться к автоматически генерируемым backing field авто-свойств, то есть к полям с непроизносимыми именами.
Способ доступа к ним очень похож на доступ к обычным полям, отличается лишь шаблон имени члена, который выглядит так:
<MyProperty>k__BackingField
Возьмём в качестве примера следующий класс:
class Foo
{
private string InstanceProperty { get; set; } = "instance-property";
}
Ниже приведён unsafe accessor для backing field этого свойства, а также примеры того, как прочитать приватное backing field и как изменить его значение.
[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.