我有重复代码的问题,想知道进一步缩短代码的方法。
这就是我的代码目前的样子:
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/