1

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

    private string userID;
    public string ID
    {
        get
        {
            if (System.Web.HttpContext.Current.Request.Headers.AllKeys.Contains("UID"))
            {
                userID = System.Web.HttpContext.Current.Request.Headers["UID"].ToString();
            }
            else
            {
                userID = "0000";
            }
            return userID;
        }
    }
4

5 回答 5

2

可以这样做,但在这种情况下,我个人会去寻求一个功能。

原因很简单:当调用 a 时function期望其中可能发生一些计算。

相反,当一个人调用 a 时property,这不是他期望发生的事情。当你调用一个属性时,你认为你调用了一些内部field包装器。

重复一遍,你所做的一切都是可能的,但从架构的角度来看并不是那么好。

因此,对于这种情况,我的建议是:使用function.

于 2013-05-09T14:15:31.600 回答
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"此实现通过将初始检索的结果缓存在私有实例变量中来避免重复读取。

于 2013-05-09T14:15:24.133 回答
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";
            }

        }
    }
于 2013-05-09T14:15:08.503 回答
0

因为您使用的是公共财产,所以您可以随时更改实现。没有 userID 变量是无用的,如果您将来需要它,您可以随时添加它。

于 2013-05-09T14:16:04.117 回答
0

在这种情况下,您没有保留任何数据,因此拥有支持字段userID是没有意义的。

于 2013-05-09T14:15:15.473 回答