簡體   English   中英

asp.net Web控件的公共屬性保存在哪里?

[英]Where is the public properties of a asp.net web control saved?

我有一個從另一個Web控件(在本例中為GridView)派生的Web控件。 當我向該Web控件添加新屬性時,例如

public string name {get;set;} 

該財產被保存在某個地方嗎? 如果是這樣,它是自動存儲在控件狀態中還是我需要重寫SaveControlState函數?

我能夠確定應用程序的行為,但想知道正確的實現。

還有其他方法,但是超出此問題的范圍,請參見下文:

//stores it in memory
public string name {get;set;} 

//viewstate backed property, preserved on postback when viewstate is enabled
public string name {
    get
    {
        return (string)ViewState["name "] ?? String.Empty; //default value
    }
    set
    {
        ViewState["name "] = value;
    }
}

以這種方式聲明的屬性由編譯器創建的私有字段支持。 他們只堅持一生。

如果要在兩次回發之間保持不變,請使用ViewState作為后備存儲。 如您所建議,您也可以覆蓋控件狀態方法,但是ViewState可能更簡單。

ETA:Schott先生在答復中有使用ViewState的一個很好的例子。

“該財產是否保存在某個地方?”是什么意思? 如果將屬性添加到類中,則它是類的成員,並且包含在該類實例的作用域中的堆中。

您只是在詢問自動實現屬性的語法嗎? 當您編寫此代碼時:

public string name {get;set;}

它實際上只是語法糖。 在執行代碼時,編譯器已將其轉換為以下形式:

private string _name;
public string name
{
    get
    {
        return _name;
    }
    set
    {
        _name = value;
    }
}

自動實現的屬性只是一個方式,以減少的代碼,你需要輸入量,讓你專注於你想表達,而不必把它包在這么多語言的開銷並沒有真正有助於表現是什么代碼。 最終結果與手動實現整個屬性完全相同,如果您不需要向該屬性添加任何自定義邏輯,那只是捷徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM