【发布时间】:2011-04-19 23:29:57
【问题描述】:
我们有一个用于一些类似 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 forum。
【问题讨论】:
标签: c# properties aop postsharp