asp.net伺服器控制項開發(三) :簡單屬性

來源:互聯網
上載者:User
  一個控制項最基本的元素是屬性,屬性有好多種類型,在這節中我將先介紹以下簡單的屬性,拿一個我們最熟悉的控制項TextBox來說,Text(string),Enabled(bool),Columns(int)等都是屬性,這些就是我今天要講的簡單類型的屬性。
屬性的寫法很簡單,一般的屬性可以是可讀寫的,也可以是唯讀或者唯寫的,這都取決於屬性的“訪問器”,一般的寫法如下

    class Pro
    {
        private string _readOnlyPro = "i'm readonly!";
        private string _writeOnlyPro;
        private string _readAndWritePro;

        /// <summary>
        /// 唯讀屬性
        /// </summary>
        public string ReadOnlyPro
        {
            get { return _readOnlyPro; }
        }

        /// <summary>
        /// 唯寫屬性
        /// </summary>
        public string WriteOnlyPro
        {
            set { _writeOnlyPro = value; }
        }

        /// <summary>
        /// 可讀寫屬性
        /// </summary>
        public string ReadAndWritePro
        {
            get { return _readAndWritePro; }
            set { _readAndWritePro = value; }
        }
}

上面代碼就為一個類添加3個屬性,分別是唯讀,唯寫,和可讀寫的屬性。
但是我在本系列第二節中講到的Web程式設計是要考慮到在一個web請求的期間之外來保持資訊的,這時我們就不能用簡單的私人變數來儲存屬性的值,要用到ViewSate,下面有一個例子說明了有用ViewState和沒有用ViewSats來儲存屬性之間的區別。
我先定義一個繼承自Control的類,裡面有一個屬性是用ViewState儲存的,而另外一個是用一個私人變數來儲存。

    public class ViewStateControl : Control
    {
        /// <summary>
        /// 使用了ViewState的屬性
        /// </summary>
        public string ViewStatePro
        {
            get
            {
                object obj = this.ViewState["ViewStatePro"];
                if (obj != null)
                {
                    return (string)obj;
                }
                return "";
            }
            set
            {
                this.ViewState["ViewStatePro"] = value;
            }
        }

        private string _nonViewStatePro;
        /// <summary>
        /// 未使用ViewState的屬性
        /// </summary>
        public string NonViewStatePro
        {
            get
            {
                return _nonViewStatePro;
            }
            set
            {
                _nonViewStatePro = value;
            }
        }
        /// <summary>
        /// 擷取個屬性的值
        /// </summary>
        public string ProValues()
        {
            return "ViewStatePro's value is '" + this.ViewStatePro + "'<br/>NonViewStatePro's value is '" + this.NonViewStatePro + "'";
        }
}

接下來我建立一個測試用的網頁,添加剛才ViewSateControl類所在程式集的引用後,在網頁上設計如下

<cc1:ViewStateControl ID="ViewStateControl1" runat="server" />
<asp:Button ID="btnSetValue" runat="server" Text="SetValue" OnClick="btnSetValue_Click" />

最後我在網頁的codebehind的cs代碼中的PageLoad事件中給2個屬性賦值,在Button的Click事件中讓它們顯示出來

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.ViewStateControl1.ViewStatePro = "hello";
            this.ViewStateControl1.NonViewStatePro = "world";
        }
    }

    protected void btnSetValue_Click(object sender, EventArgs e)
    {
        Response.Write(this.ViewStateControl1.ProValues());
    }


運行程式後按下SetValue的Button可以看到顯示了ViewStatePro的值但是NonViewStatePro的值卻沒有顯示,這就說明了ViewStatePro的屬性在pageload中賦值的時候讓ViewState給儲存下來了,當按下Button後頁面postback這時存在ViewState中的值會在postback之後再次將postback之前的值再次賦給屬性ViewStatePro;而NonViewSatePro的屬性的儲存載體是一個私人變數,它並沒有存入ViewState,所以在按下Button後頁面postback,私人變數的值隨著頁面的生存周期的結束而一起被銷毀了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.