C#.NET中的欄位與屬性_1

來源:互聯網
上載者:User

標籤:c#.net   欄位與屬性   

一個類中需要有描述這個類資訊的資料,而儲存這些資料的變數就成為欄位。

欄位預設的存取層級為private(只有本類可以直接存取),我們將其存取層級改為public,在其他類中就可以訪問了。

欄位和屬性工作表示對象包含的資訊,欄位類似於變數,因為可以直接讀取或設定他們。

屬性是對欄位的封裝。屬性可以對欄位的訪問進行控制,可以進行非法設定值的判斷。屬性並不儲存資料,欄位儲存資料。



封裝後,有一些欄位我只能賦值,不能讀取,有些只能讀取,不能賦值,而且可以對傳過來的值進行選擇。

建議所有的欄位不要寫成public層級,為欄位設定屬性,符合物件導向封裝的原則。


using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 屬性{    class Program    {        static void Main(string[] args)        {        }    }    class Person    {        //string _name;            //欄位 姓名  欄位的預設存取層級為 private(只能在本類中調用)        //public string Name       //屬性  對欄位_name進行封裝        //{        //    get        //    {        //        return _name;        //    }        //    set        //    {        //        _name = value;        //    }        //}        public string Name    //這是自動實作屬性 方便快捷產生屬性 相當於以上注釋的代碼        {            get;              //當寫自動實作屬性時,get和set兩個都不能省            set;        }        private int _age;       //欄位 年齡        public int Age          //屬性        {            get { return _age; }            set            {                if (value < 0)         //年齡是大於0的                {                    _age = 18;        //如果使用者使用非法值,將年齡預設設定為18歲                }                else                {                    _age = value;                }            }        }         public char Gender;         //欄位 性別  存取層級為public 在其他類中可以直接存取        private DateTime birthdate;        //欄位 生日 該欄位的存取層級為private,我要想在其他類中使用該欄位,只好使用方法        public DateTime GetBirthdate()   //這裡的方法相當於屬性中的get        {            return birthdate;        }        public void SetBirthdate(DateTime value)   //這裡的方法相當於屬性中的set        {            birthdate = value;        }        //所謂屬性就是綁定了欄位的兩個方法        //當我們在屬性中不寫 get訪問體時,該欄位就是唯寫,不寫set訪問體時,該欄位就是唯讀。    }}




慣用法:屬性開頭字母大寫,欄位開頭字母小寫。

選中欄位  不論是public int age; 或者是private int age; 都可以。選中後按快速鍵  ctrl+r,e 彈出封裝欄位視窗,改改屬性名稱即可。

 或是選中欄位後,滑鼠右鍵選擇重構,選擇封裝欄位,改改屬性名稱即可。

650) this.width=650;" src="http://img.blog.csdn.net/20140715093427032" />

650) this.width=650;" src="http://img.blog.csdn.net/20140715093522193" />


.net3.0之後就有了屬性的簡寫方式

public string Name { get; set; } 

//編譯器自動幫我們產生私人欄位和set get程式碼片段

//自動實作屬性,get和set都不能省略

//唯讀屬性 public string Name{ get; private set;}

//唯寫屬性 public string Name{ private get; set;}

輸入prop  +  再兩下tab鍵    會出現屬性的格式,改改傳回值,屬性名稱就可以了。


 650) this.width=650;" src="http://img.blog.csdn.net/20140715093917114" />


按下兩下Tab鍵之後

650) this.width=650;" src="http://img.blog.csdn.net/20140715094032821" />

只需要改改傳回值,屬性名稱就好了。

 

 public string Name { get; set; }     //等同於下面的代碼


private string name;

public string Name

{

    set{ this.name = value;}

    get{ return this.name;}

}

 

自動實作屬性,自動實現了屬性的訪問器,快速產生屬性。

當屬性只需要單純的讀寫訪問時使用。另外,有些特別屬性也可以快速實現:

唯讀屬性:publicstring Str{ get; private set;}

唯寫屬性:publicstring Str{ private get; set;}

當屬性是派生屬性或者要做存取控制或需要控制非法值的時候,就不能如此使用了。這個時候需要自己實現訪問器:


private int _salary;public int Salary{     get    {        //工資不可以隨便給別人看,得有許可權        if(Authorization.Check(visitor))            return _salary;        throw new NotAuthorizeException();    }    set    {        //工資是大於零的        if(value > 0)        {            _salary = value;        }        else        {           //提示錯誤        }    }}






本文出自 “為了夢,愛一生” 部落格,請務必保留此出處http://fanfl.blog.51cto.com/5493505/1438261

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.