我有一个有近20个公共场所的课程.这些属性的共同之处在于它们都是字符串,并且它们填充了来自数据库的不同表的数据.
此外,该设置非常正常,而get是特殊的,因为我需要调用特定的方法.目前为每个房产都做了这个(见下文).
我的问题是:是否有另一种更有效的方法,这样我就不必用这种方式手工定义每个公共财产?
class myclass
{
private string _Firstname;
private string _Lastname;
.....
public string Firstname
{
get {
return ModifyStringMethod(this._Firstname);
}
set {
this._Firstname = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,每个公共财产看起来都一样.get调用ModifyStringMethod,私有成员作为参数给出,而set只设置私有成员.
Eup*_*ric 12
另一种选择类似于Dion V.的解决方案,但它利用隐式转换使属性从外部表现得像普通字符串,并且可以使用简单的自动属性.但这只有在ModifyStringMethod静态且不需要来自类外部的参数时才有效.
public struct EllipsisString
{
private string _value;
public string Value {get { return _value; }}
public EllipsisString(string value)
{
_value = value;
}
// implicit conversion from string so it is possible to just assign string to the property
public static implicit operator EllipsisString(string value)
{
return new EllipsisString(value);
}
public static implicit operator string(EllipsisString original)
{
return SpecialMethod(original.Value);
}
public override string ToString()
{
return SpecialMethod(Value);
}
private static string SpecialMethod(string value)
{
return value + "...";
}
}
Run Code Online (Sandbox Code Playgroud)
用法很简单:
private EllipsisString FirstName { get; set; }
public void Method()
{
FirstName = "Thomas";
Console.WriteLine(FirstName);
Console.WriteLine(FirstName.Value);
}
Run Code Online (Sandbox Code Playgroud)