如果我有一个只有getter的公共属性,使用私有变量来赋值然后返回该值是正确的还是我应该使用return
而不是设置{{{1}的值1}?将来我们计划添加更多将使用userID字段的功能,而Method将添加到使用userID字段的此类中。这种或那种方式有什么好处吗?还有其他方法可以做到这一点吗?
userID
答案 0 :(得分:2)
现在编写getter的方式不需要赋值,因为后续调用会忽略先前方法设置的值。但是,您可以缓存结果,如下所示:
private string userID;
public string ID {
get {
if (userID == null) {
if (System.Web.HttpContext.Current.Request.Headers.AllKeys.Contains("UID")) {
userID = System.Web.HttpContext.Current.Request.Headers["UID"].ToString();
} else {
userID = "0000";
}
}
return userID;
}
}
此实现通过在私有实例变量中缓存初始检索的结果,避免重复读取"UID"
。
答案 1 :(得分:2)
你可以这样做,但在这种情况下,我个人会去做一个功能。
原因很简单:
一次调用function
时,期望可能会在其中发生某些计算。
相反,当一个人调用property
时,并不是他预期会发生的事情。当您调用属性时,您认为您调用了一些内部field
包装器。
重复一遍, 可以做什么,但从架构的角度来看,它并不是那么好。
所以,我的建议,对于这种情况:使用function
。
答案 2 :(得分:0)
使用return
您在userID
get
所以
public string ID
{
get
{
if (System.Web.HttpContext.Current.Request.Headers.AllKeys.Contains("UID"))
{
return System.Web.HttpContext.Current.Request.Headers["UID"].ToString();
}
else
{
return "0000";
}
}
}
答案 3 :(得分:0)
在这种情况下,您不会持久保存任何数据,因此拥有userID
的支持字段毫无意义。
答案 4 :(得分:0)
因为您正在使用公共属性,所以您可以随时更改实施。没有userID变量是无用的,如果您将来需要它,您可以随时添加它。