我们有一个用于一些类似 MVC 的系统的基础对象,其中后代中的每个属性都写成这样:
public String FirstName
{
get { return GetProperty<String>("FirstName", ref _FirstName); }
set { SetProperty<String>("FirstName", ref _FirstName, value); }
}
这样做既是为了调试目的,也是为了通知和验证目的。我们使用 getter 来提醒我们代码明确标记了要读取的内容(以便基类能够仅在这些属性更改时调用它)并出错的情况,我们使用 setter用于属性更改通知、脏标志处理、验证等。
为简单起见,我们假设这些方法的实现如下所示:
protected T GetProperty<T>(String propertyName,
ref T backingField)
{
return backingField;
}
protected Boolean SetProperty<T>(String propertyName,
ref T backingField,
T newValue)
{
backingField = newValue;
return true;
}
当然,这两个都有更多的代码,但是这段代码与我的问题无关,或者至少我希望如此。如果是,我将修改问题。
无论如何,我想在自动属性上编写一个自动为我实现调用的 PostSharp 方面,如下所示:
public String FirstName { get; set; }
有没有人知道我将如何去做?
我自己制作了 OnMethodBoundaryAspect 类,但是使用 ref 参数调用泛型实现的艺术让我望而却步。
这是两个类,我想扩充 TestObject 类以自动调用属性获取和设置的正确方法。
public class BaseObject
{
protected T GetProperty<T>(String propertyName,
ref T backingField)
{
return backingField;
}
protected Boolean SetProperty<T>(String propertyName,
ref T backingField,
T newValue)
{
backingField = newValue;
}
}
public class TestObject : BaseObject
{
public String FirstName
{
get;
set;
}
public String LastName
{
get;
set;
}
}
编辑:也发布在PostSharp 论坛上。