我可以为具有特定实现的属性插入支持字段吗?

Can I insert backing fields for properties with a specific implementation?

我正在尝试使用 PostSharp 创建属性以实现属性的特定支持字段。但是我没有在文档、官方示例或此处找到任何有用的答案。

这是我正在尝试做的一个例子:

[WrappedProperty]
public int MyProperty { get; set; }

将编译为

private WrapperClass<int> _generatedBackingField_myProperty;

public int MyProperty 
{
    get => _generatedBackingField_myProperty.Value;
    set => _generatedBackingField_myProperty.Value = value;
}

有什么方法可以用 PostSharp 实现吗?

我找到了答案,你可以使用LocationInterceptionAspect截取属性。 所以代码看起来像这样:

[PSerializable]
public class WrappedProperty : LocationInterceptionAspect
{
    private WrapperClass<object> _backingField;

    public override void OnGetValue(LocationInterceptionArgs args)
    {
        InitBackingField();

        args.Value = _backingField.Value;
    }

    public override void OnSetValue(LocationInterceptionArgs args)
    {
        InitBackingField();

        _backingField.Value = args.Value;
    }
}