我可以为具有特定实现的属性插入支持字段吗?
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;
}
}
我正在尝试使用 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;
}
}