优雅地处理C#中的重复属性代码

Eri*_* J. 6 c# properties visual-studio c#-4.0

语言快捷方式

public string Code
{
    get;
    set;
}
Run Code Online (Sandbox Code Playgroud)

在C#中定义普通属性时节省了一些输入.

然而,我发现自己编写了高度重复的,不那么平凡的属性代码,仍然遵循明确的模式,例如

public string Code
{
    get { return code; }
    set 
    {
        if (code != value)
        {
            code = value; 
            NotifyPropertyChanged("Code");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我当然可以定义一个Visual Studio片段来减少输入.但是,如果我需要在我的模式中添加一些内容,我必须返回并更改相当多的现有代码.

有更优雅的方法吗?片段是最好的方式吗?

更新:

作为现在的快速改进,我已经编辑(在备份之后)

C:\ Program Files\Microsoft Visual Studio 10.0\VC#\ Snippets\1033\Refactoring\EncapsulateField.snippet

(路径适用于VS 2010)

反映我目前的模式.现在,内置的重构工具使用我的模板从字段创建属性.缺点:Visual Studio的全局更改,无法追溯更改现有属性代码.

Cam*_*and 8

这被称为面向方面编程(AOP).

斯科特汉塞尔曼最近接受了LinFu的创始人Philip Laureano的采访.(链接)

根据您的需要,有许多AOP工具.

最后,使用上述工具的一些INotifyPropertyChanged类的实现:

更新2013:自从这个原始答案以来,我遇到了另一种解决方案,可以轻松完成我需要的一切.

PropertyChanged.Fody(以前称为NotifyPropertyWeaver)是一个后编译IL编织器,它会自动为您插入属性更改的代码.这是我对INotifyPropertyChanged的首选解决方案.