我在声明属性的代码示例中一遍又一遍地看到这一点。 我知道这是利用带有匿名私有支持字段的自动属性功能。
public sometype somevar {get;set;} <-- nothing happening in the getter or setter.
但是,我似乎再也没有看到这样的例子了。当我在 2000 年上大学时,一直在使用 .NET 编程这样的东西。我能想到的最好的例子有一组属性,如服务器、数据库、用户,然后是另一个名为 ConnectionString 的属性(这只是一个例子,我没有这样的代码)
public string ServerName { get; set; }
public string DatabaseName { get; set; }
public string UserName { get; set; }
public string ConnectionString
{
get
{
return SomePrivateMethod(this.ServerName,this.DatabaseName,this.UserName);
}
set
{
this.ServerName = PrivateMethodThatParsesOutTheServerName(value);
this.DatabaseName = PrivateMethodThatParsesOutTheServerName(value);
this.UserName = PrivateMethodThatParsesOutTheServerName(value);
}
}
我正准备做这样的事情我有一个名为 strap 的属性,它是一个文本字段,用于存储诸如“0001020003”之类的值,但我有一个无法解释该带格式的遗留系统。所以我打算这样做
public string strap {get;set;}
public string legacyFormat {
get {
return FormatForLegacySystem(this.strap);
}
//don't need a setter though
}
然后我想,也许这应该是一个扩展......
public static string AsLegacyFormat(this string value){
//formatting code;
return fancynewformat;
}
最后一个想法。我在想这种东西真的属于我的服务层。
public getLegacyFormat(string strap)
{
//stuff here
}
但是,现在当我需要以旧格式传递它时,必须包装每个 strap 实例似乎很愚蠢。并且很想将这种方法与属性一起使用
Model.LegacyFormat = service.getLegacyFormat(Model.strap);
好吧,这看起来很糟糕,因为 LegacyFormat 基于我的表带应该是不可变的。