Могу ли я вставить вспомогательные поля для свойств с указанной реализацией c? - PullRequest
1 голос
/ 18 февраля 2020

Я пытаюсь создать атрибут с PostSharp, чтобы реализовать заданные c вспомогательные поля свойств. Однако я не нашел никаких полезных ответов в документации, официальных примерах или здесь на SO.

Вот пример того, что я пытаюсь сделать:

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

скомпилируется в

private WrapperClass<int> _generatedBackingField_myProperty;

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

Есть ли способ добиться этого с помощью PostSharp?

1 Ответ

1 голос
/ 18 февраля 2020

Я нашел ответ, вы можете использовать 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;
    }
}
...