屬性和字段

字段(Field)

是一種表示與對(duì)象或類關(guān)聯(lián)的變量的成員。通常情況下,應(yīng)僅對(duì)具有 private 或 protected 可訪問(wèn)性的變量使用字段,即字段的設(shè)計(jì)初衷是供類或類的派生類內(nèi)部使用的,其聲明只讀屬性,作用是存儲(chǔ)數(shù)據(jù)。

屬性(Property)

是另一種類型的類成員,定義屬性的目的是在于便于一些私有字段的訪問(wèn)。類提供給外部調(diào)用時(shí)用的可以設(shè)置或讀取一個(gè)值,屬性則是對(duì)字段的封裝,將字段和訪問(wèn)自己字段的方法組合在一起,提供靈活的機(jī)制來(lái)讀取、編寫(xiě)或計(jì)算私有字段的值。屬性有自己的名稱,并且包含get 訪問(wèn)器和set 訪問(wèn)器。

聲明格式:

屬性修飾符  類型  屬性名   
{  
   get{  
     //get訪問(wèn)器代碼  
    }  
   set{  
     //set訪問(wèn)器代碼  
    }  
}  

屬性分類:根據(jù)get訪問(wèn)器和set訪問(wèn)器是否存在,屬性可按下列規(guī)則分類。

那么問(wèn)題來(lái)了,既然已經(jīng)有字段用來(lái)存儲(chǔ)數(shù)據(jù),為什么還要引入屬性來(lái)對(duì)數(shù)據(jù)進(jìn)行訪問(wèn),把聲明的字段直接定義成公有的不就可以了嗎?

解答:在C#中,我們可以非常自由的、毫無(wú)限制的訪問(wèn)公有字段,但在一些場(chǎng)合中,我們可能希望限制只能給字段賦于某個(gè)范圍的值、或是要求字段只能讀或只能寫(xiě),或是在改變字段時(shí)能改變對(duì)象的其他一些狀態(tài),這些單靠字段是無(wú)法做到的,于是就有了屬性,屬性中包含兩個(gè)塊:set和get,set塊負(fù)責(zé)屬性的寫(xiě)入工作,get塊負(fù)責(zé)屬性的讀取工作。在兩個(gè)塊中都可以做一些其他操作,如在set中驗(yàn)證賦的值是否符合要求并決定是否進(jìn)行賦值。當(dāng)缺少其中一塊時(shí)屬性就只能讀或只能寫(xiě),set和get塊中屬性必需有一個(gè),因?yàn)榧床荒茏x又不能寫(xiě)的屬性是沒(méi)有意義的??傊?,外部能夠訪問(wèn)和修改定義為public的字段,這么做是違反類的安全性設(shè)計(jì)原則的,所以一般的字段都是設(shè)為私有的,字段的訪問(wèn)便是由屬性來(lái)實(shí)現(xiàn)。

C#通過(guò)屬性特性讀取和寫(xiě)入字段(成員變量),而不直接直接讀取和寫(xiě)入,以此來(lái)提供對(duì)類中字段的保護(hù)。

屬性VS字段


適用情況

公共字段:

  1. 允許自由讀寫(xiě)

  2. 取值范圍只收數(shù)據(jù)類型約束而無(wú)其他任何特定限制;

  3. 值的變動(dòng)不需要引發(fā)類中其它任何成員的相應(yīng)變化;

如果均滿足上述條件,那么我們便可以大膽地使用公共字段;

屬性:

  1. 要求字段只能讀或只能寫(xiě);

  2. 需要限定字段的取值范圍;

  3. 在改變一個(gè)字段的值的時(shí)候希望改變對(duì)象的其它一些狀態(tài);

如果滿足上述條件中的任何一個(gè),就應(yīng)該使用屬性。

代碼展示

pulic class User  
{  
    private string _name;//_name為字段  
    public string Name   //Name為屬性,它含有代碼塊  
     {  
       get  
       {  
          return _name;//讀?。ǚ祷豞name值)  
        }  
       set   
       {  
          _name = value;//為_(kāi)name賦值  
        }  
}  

User類的私有的字段m_name可以通過(guò)公開(kāi)的屬性Name對(duì)它進(jìn)行讀寫(xiě)操作。 通過(guò)“屬性”讀取“字段”值時(shí),將觸發(fā)get訪問(wèn)器;通過(guò)“屬性”為“字段”賦值,將觸發(fā)set訪問(wèn)器。


總結(jié)

屬性以靈活的方式實(shí)現(xiàn)了對(duì)私有字段的訪問(wèn),是字段的自然擴(kuò)展,一個(gè)屬性總是與某個(gè)字段相關(guān)聯(lián),字段能干的,屬性一定能干,屬性能干的,字段不一定干的了;為了實(shí)現(xiàn)對(duì)字段的封裝,保證字段的安全性,產(chǎn)生了屬性,其本質(zhì)是方法,暴露在外,可以對(duì)私有字段進(jìn)行讀寫(xiě),以此提供對(duì)類中字段的保護(hù),字段中存儲(chǔ)數(shù)據(jù)更安全。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容