c# - 如何通过重复 get 和 setter 来缩短属性

标签 c# .net properties attributes

我有重复代码的问题,想知道进一步缩短代码的方法。

这就是我的代码目前的样子:

private string _description = null;    
public string Description
{
    get
    {
        _description = GetLang(this.TabAccountLangs, "TextAccount");
        return _description;
    }
    set
    {
        if (object.Equals(value, _description))
            return;

        SetLang(this.TabAccountLangs, "TextAccount", value);

        OnPropertyChanged();
    }
}

这个属性和其中的代码可以在一个类和整个项目的多个类中多次出现,唯一改变的是属性的名称和它自己的支持字段,以及方法调用的参数.

现在我想知道,是否有办法进一步缩短这段代码,例如: (只是伪代码)

[DoYourSuff(FirstParam=this.TabAccountLangs, SecondParam="TextAccount", ThirdParam=value)]
public string Description { get; set; }

这个例子会使用一个属性,但也许有更好的东西,或者如果属性是最好的方式来做到这一点。我将如何实现这样的属性?

最佳答案

几个答案似乎都值得,但这里有另一个选择。

看看Fody .
他们有大量的插件,其中一些做的事情非常相似。如果找不到您喜欢的,您可以根据自己的意愿对其进行修改(同时将其发回以贡献给社区)。

PropertyChanged例如,Fody 的插件将更改这 51 行代码:

public class Person : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    string givenNames;
    public string GivenNames
    {
        get { return givenNames; }
        set
        {
            if (value != givenNames)
            {
                givenNames = value;
                OnPropertyChanged("GivenNames");
                OnPropertyChanged("FullName");
            }
        }
    }

    string familyName;
    public string FamilyName
    {
        get { return familyName; }
        set 
        {
            if (value != familyName)
            {
                familyName = value;
                OnPropertyChanged("FamilyName");
                OnPropertyChanged("FullName");
            }
        }
    }

    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", GivenNames, FamilyName);
        }
    }

    public virtual void OnPropertyChanged(string propertyName)
    {
        var propertyChanged = PropertyChanged;
        if (propertyChanged != null)
        {
            propertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

致 14:

[ImplementPropertyChanged]
public class Person 
{        
    public string GivenNames { get; set; }
    public string FamilyName { get; set; }

    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", GivenNames, FamilyName);
        }
    }
}

关于c# - 如何通过重复 get 和 setter 来缩短属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19677030/

相关文章:

c# - 更改基类属性 setter 行为

java - 在 Struts 2.x 中使用自定义资源包/属性扩展库

c# - DataRepeater 控件 WinForms 去除虚线

c# - 如果设置了所有属性,如何进行单元测试。没有重复

c# - 搜索字符串以查找文件名

c# - 为什么在任务中运行的 Thread.Sleep 不会阻塞 WinForms UI 线程?

.net - 如何在 Windows Mobile 中读取 GPS 信号强度?

c# - 使用 TempData 和重定向填充 ViewBag 时出现问题

c# - 无法在HDInsight的非默认容器中的Hive表上远程运行查询

c# - 屏幕截图后图像上的 Unity 水印