2013-05-09 2 views
1

Если у меня есть общедоступное свойство, у которого есть только получатель, правильно ли использовать переменную private, чтобы присвоить значение, чтобы вернуть это значение, или я должен просто использовать return, а не устанавливать значение userID? В будущем мы планируем добавить больше функциональных возможностей, которые будут использовать поле userID, а методы будут добавлены в этот класс, которые используют поле userID. Есть ли какая-либо польза для того или иного? Есть ли другой способ, чтобы это было сделано?Использование частной переменной в общедоступном свойстве getter

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; 
     } 
    } 

ответ

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"; 
      } 

     } 
    } 
0

В этом случае, вы не сохраняющиеся никаких данных, поэтому имея подкладочный поле userID Бессмысленно.

2

Способ, которым геттер кодируется прямо сейчас, не требует назначения, поскольку последующие вызовы игнорируют значение, установленное предыдущими методами. Тем не менее, вы можете кэшировать результат, например:

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" раз за счет кэширования результатов начального поиска в частной переменной экземпляра.

2

Вы можете сделать это, но я лично пойду, в данном случае, для функции.

Причина проста: Один, когда называет function, ожидает, что некоторые вычисления могут происходить внутри него.

Вместо этого, когда вы вызываете property, это не то, что он ожидал бы. Когда вы вызываете свойство, вы думаете, что вызываете некоторую внутреннюю обертку field.

Повторите, что вы делаете можно сделать, но это не так хорошо с архитектурной точки зрения.

Итак, мое предложение, для этого случая: используйте function.

0

Поскольку вы используете общедоступную собственность, вы можете изменить ее реализацию в любое время. Нет переменной userID бесполезно, если она вам понадобится в будущем, вы всегда можете ее добавить.

Смежные вопросы