2013-05-09 81 views
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; 
     } 
    } 

回答

0

使用return

您在get

設置userID所以

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

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"反覆。

2

可以這樣做,但我個人會去,在這種情況下,功能。

原因很簡單: 一個當調用function預計,可能它裏面發生的一些計算。

取而代之的是,當人們撥打property時,這並不是他期望會發生的事情。當你打電話給一個物業時,你認爲你打電話給內部的field包裝。

重複,你做什麼可能做到的,但從架構的角度來看並不是那麼好。

因此,對於這種情況,我的建議是:使用function

0

因爲您使用的是公共財產,您可以隨時更改實施。沒有userID變量是無用的,如果將來你需要它,你可以隨時添加它。

相關問題