【发布时间】:2013-07-07 05:07:00
【问题描述】:
我有以下结构,并且想要一个同时具有以下两个类的好处的解决方案。第一类是使用字符串和强类型成员:
public class UserSessionData
{
private string Get(string key)
{
throw new NotImplementedException("TODO: Get from external source");
}
private void Set(string key, string value)
{
throw new NotImplementedException("TODO: Set in external source");
}
public string CustomerNumber {
get { return Get("CustomerNumber"); }
set { Set("CustomerNumber", value); }
}
public string FirstName {
get { return Get("FirstName"); }
set { Set("FirstName", value); }
}
public string LastName {
get { return Get("LastName"); }
set { Set("LastName", value); }
}
// ... a couple of hundreds of these
}
我可以想象另一种方法是带有enum 参数的Get 和Set 方法。这是第二课:
public class UserSessionData
{
public enum What {
CustomerNumber, FirstName, LastName, // ...
}
public string Get (What what) { return MyExternalSource(what); }
public string Set (What what, string value) { return MyExternalSource(what); }
}
但是 #2 类的消费者方面并不漂亮:UserSessionData.Get(UserSessionData.What.CustomerNumber)
与第一类比较:UserSessionData.CustomerNumber
在我的第一个类示例中,是否有调用 Get 和 Set 方法的强类型方法?换一种说法:我如何从这两个类中获得好处,即强类型成员的可维护性和美观的语法?
【问题讨论】:
-
Get(CustomerNumber.GetType().Name);:这不等同于Get("CustomerNumber");。相反,它相当于Get("String"); -
在静态类中使用公共非静态属性有什么意义?
-
您可以使用设计时T4 Templates 生成成员属性。
-
@Tigran:没有意义。它根本无法编译。
-
@DanielHilgarth:除了编译,我很难理解需求。