學(xué)習(xí)啦>知識(shí)大全>知識(shí)百科>公共基礎(chǔ)知識(shí)>

.net屬性和特性的區(qū)別

時(shí)間: 映芳735 分享

  特性

  MADN的定義為:公共語(yǔ)言運(yùn)行時(shí)允許添加類似關(guān)鍵字的描述聲明,叫做attributes, 它對(duì)程序中的元素進(jìn)行標(biāo)注,如類型、字段、方法和屬性等。Attributes和Microsoft .NET Framework文件的元數(shù)據(jù)保存在一起,可以用來(lái)向運(yùn)行時(shí)描述你的代碼,或者在程序運(yùn)行的時(shí)候影響應(yīng)用程序的行為。

  我們簡(jiǎn)單的總結(jié)為:定制特性attribute,本質(zhì)上是一個(gè)類,其為目標(biāo)元素提供關(guān)聯(lián)附加信息,并在運(yùn)行期以反射的方式來(lái)獲取附加信息。具體的特性實(shí)現(xiàn)方法,在接下來(lái)的討論中繼續(xù)深入。

  屬性

  屬性是面向?qū)ο缶幊痰幕靖拍?,提供了?duì)私有字段的訪問(wèn)封裝,在C#中以get和set訪問(wèn)器方法實(shí)現(xiàn)對(duì)可讀可寫屬性的操作,提供了安全和靈活的數(shù)據(jù)訪問(wèn)封裝。關(guān)于屬性的概念,不是本文的重點(diǎn),而且相信大部分的技術(shù)人員應(yīng)該對(duì)屬性有清晰的概念。

  區(qū)別

  通過(guò)對(duì)概念的澄清和歷史的回溯,我們知道特性和屬性只是在名稱上有過(guò)糾葛,在MSDN上關(guān)于attribute的中文解釋甚至還是屬性,但是我同意更通常的稱呼:特性。在功能上和應(yīng)用上,二者其實(shí)沒(méi)有太多模糊的概念交叉,因此也沒(méi)有必要來(lái)比較其應(yīng)用的異同點(diǎn)。本文則以特性的概念為重點(diǎn),來(lái)討論其應(yīng)用的場(chǎng)合和規(guī)則。

  我理解的定制特性,就是為目標(biāo)元素,可以是數(shù)據(jù)集、模塊、類、屬性、方法、甚至函數(shù)參數(shù)等加入附加信息,類似于注釋,但是可以在運(yùn)行期以反射的方式獲得。定制特性主要應(yīng)用在序列化、編譯器指令、設(shè)計(jì)模式等方面。

  常用特性

  常用特性,也就是.NET已經(jīng)提供的固有特性,事實(shí)上在.NET框架中已經(jīng)提供了豐富的固有特性由我們發(fā)揮,以下精選出我認(rèn)為最常用、最典型的固有特性做以簡(jiǎn)單討論,當(dāng)然這只是我的一家之言,亦不足道。我想了解特性,還是從這里做為起點(diǎn),從.NET提供的經(jīng)典開始,或許是一種求知的捷徑,希望能給大家以啟示。

  AttributeUsage

  AttributeUsage特性用于控制如何應(yīng)用自定義特性到目標(biāo)元素。關(guān)于AttributeTargets、AllowMultiple、Inherited、ValidOn,請(qǐng)參閱示例說(shuō)明和其他文檔。我們已經(jīng)做了相當(dāng)?shù)慕榻B和示例說(shuō)明,我們還是在實(shí)踐中自己體會(huì)更多吧。

  Flags

  以Flags特性來(lái)將枚舉數(shù)值看作位標(biāo)記,而非單獨(dú)的數(shù)值。

  Serializable

  Serializable特性表明了應(yīng)用的元素可以被序列化(serializated),序列化和反序列化是另一個(gè)可以深入討論的話題,在此我們只是提出概念,深入的研究有待以專門的主題來(lái)呈現(xiàn),限于篇幅,此不贅述。

  Conditional

  Conditional特性,用于條件編譯,在調(diào)試時(shí)使用。注意:Conditional不可應(yīng)用于數(shù)據(jù)成員和屬性。

  還有其他的重要特性,包括:Description、DefaultValue、Category、ReadOnly、BrowerAble等,有時(shí)間可以深入研究。

530027