在公共属性getter中使用私有变量

时间:2013-05-09 14:13:23

标签: c# properties

如果我有一个只有getter的公共属性,使用私有变量来赋值然后返回该值是正确的还是我应该使用return而不是设置{{{1}的值1}?将来我们计划添加更多将使用userID字段的功能,而Method将添加到使用userID字段的此类中。这种或那种方式有什么好处吗?还有其他方法可以做到这一点吗?

userID

5 个答案:

答案 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变量是无用的,如果您将来需要它,您可以随时添加它。