2017-03-01 71 views

回答

0

它被稱爲屬性。它們在編譯時生成一個getter和setter函數:

List<GetProductPrice> GetCurrentPage(){ 
    return ViewState["CurrentPage"] as List<GetProductPrice>; 
} 
void SetCurrentPage(List<GetProductPrice> value) { 
    ViewState["CurrentPage"] = value; 
} 
//i think its actual get_.. but it doesn't matter for the example 

因此它生成易用的getter setter。你可以只用撥打:

var test = CurrentPage; //compiled to var test = GetCurrenctPage(); 
CurrentPage = test; //compiled to SetCurrentPage(test); 

如果離開getter和setter空這樣的:

public int CurrentPage 
{ 
    get; 
    set; 
} 

也會產生的類支持字段,它存儲的數據:

private int _currentPage; 
public GetCurrentPage(){ return _currentPage } 
public SetCurrentPage(int value) { _currentPage = value } 

爲什麼我們這樣做?

使用getters和setter是java中的一個非常古老的最佳實踐(其中ide可以選擇生成它們)。但是這會導致很多樣板代碼!

在C#中,他們試圖通過添加這些屬性來解決這個問題。但是,爲什麼我們需要獲得者和制定者?例如,如果您希望在值發生更改時收到通知(將類標記爲髒)。我認爲實體框架使用它來跟蹤模型是否更改,否則它不會執行數據庫更新調用。還有其他有用的工具可以在編譯時在屬性中注入代碼。增加額外的功能。

如何不使用它:

使用屬性返回HttpContext.Current是危險的,因爲你偷偷取決於HttpContext所以儘量不要在任何時候做到這一點!

一般來說,當get或set裏面的代碼很重(非常廣泛)時,它也是不好的做法。它的糟糕做法是因爲其他人使用代碼可能會認爲他只是設置了一個屬性/字段,而實際上卻執行了一些非常繁重的代碼。它的最佳實踐,使特殊功能的這個代替私人的的getter/setter:

public int Property {get; private set; } 
public SetProperty(int value){ 
    //intensive code here: 
    Property = value; 
} 
+0

感謝您的詳細回覆! – neo

0

這個屬性讓財產的消費者使用它像本地採集的代碼,而無需在指ViewState的碼。它將使代碼簡單易用。

get { return ViewState["CurrentPage"] as List<GetProductPrice>; } 

這裏ViewState的對象的ViewState [ 「當前頁」]被轉換成GetProductPrice

的列表
set { ViewState["CurrentPage"] = value; } 

在這裏,列表被分配到的ViewState [ 「當前頁」]

+0

感謝您的回覆! – neo

0

此代碼將只在一個控制器,其中ViewState是物業工作。此CurrentPage屬性提供靜態類型的方式來通過該屬性訪問某個ViewState項目。

因此,您可以簡單地使用CurrentPage屬性,而不是在要訪問「當前頁面」的所有控制器代碼上噴灑ViewState["CurrentPage"] as List<GetProductPrice>

當然,「當前頁面」是一個由開發人員組成的術語,他選擇了這樣的名稱,我看不到List<GetProductPrice>與「當前頁面」有什麼關係。

+0

感謝您的回覆! – neo