成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#特性之通俗演義

開發(fā) 后端
本文主要介紹了一下C#特性,以及特性與屬性之間的區(qū)別,并且舉例說(shuō)明,希望對(duì)大家有所幫助。

首先要說(shuō)的是,可能一些剛接觸C#的朋友常常容易把屬性(Property)跟特性(Attribute)弄混淆,其實(shí)這是兩種不同的東西。屬性就是面向?qū)ο笏枷肜锼f(shuō)的封裝在類里面的數(shù)據(jù)字段,其形式為:

 C#特性代碼1

在HumanBase這個(gè)類里出現(xiàn)的字段都叫屬性(Property),而C#特性(Attribute)又是怎樣的呢?

C#特性代碼2 

簡(jiǎn)單地講,我們?cè)贖umanBase類聲明的上一行加了一個(gè)[Serializable],這就是特性(Attribute),它表示HumanBase是可以被序列化的,這對(duì)于網(wǎng)絡(luò)傳輸是很重要的,不過(guò)你不用擔(dān)心如何去理解它,如何理解就是我們下面要探討的。

C#特性可以應(yīng)用于各種類型和成員。前面的例子將特性用在類上就可以被稱之為“類特性”,同理,如果是加在方法聲明前面的就叫方法特性。無(wú)論它們被用在哪里,無(wú)論它們之間有什么區(qū)別,特性的最主要目的就是自描述。并且因?yàn)樘匦允强梢杂勺约憾ㄖ频模粌H僅局限于.NET提供的那幾個(gè)現(xiàn)成的,因此給 C#程序開發(fā)帶來(lái)了相當(dāng)大的靈活性和便利。

我們還是借用生活中的例子來(lái)介紹C#的特性機(jī)制吧。

假設(shè)有一天你去坐飛機(jī),你就必須提前去機(jī)場(chǎng)登機(jī)處換登機(jī)牌。登機(jī)牌就是一張紙,上面寫著哪趟航班、由哪里飛往哪里以及你的名字、座位號(hào)等等信息,其實(shí),這就是特性。它不需要你生理上包含這些屬性(人類出現(xiàn)那會(huì)兒還沒飛機(jī)呢),就像上面的HumanBase類沒有IsSerializable這樣的屬性,特性只需要在類或方法需要的時(shí)候加上去就行了,就像你不總是在天上飛一樣。

當(dāng)我們想知道HumanBase是不是可序列化的,可以通過(guò):

C#特性代碼3 

拿到了登機(jī)牌,就意味著你可以合法地登機(jī)起飛了。但此時(shí)你還不知道你要坐的飛機(jī)停在哪里,不用擔(dān)心,地勤人員會(huì)開車送你過(guò)去,但是他怎么知道你是哪趟航班的呢?顯然還是通過(guò)你手中的登機(jī)牌。所以,特性***的特點(diǎn)就是自描述。

既然是起到描述的作用,那目的就是在于限定。就好比地勤不會(huì)把你隨便拉到一架飛機(jī)跟前就扔上去了事,因?yàn)闃?biāo)簽上的說(shuō)明信息就是起到限定的作用,限定了目的地、乘客和航班,任何差錯(cuò)都被視為異常。如果前面的HumanBase不加上Serializable特性就不能在網(wǎng)絡(luò)上傳輸。

我們?cè)陧槑?lái)介紹一下方法特性,先給HumanProperty加上一個(gè)Run方法:

 C#特性代碼4

只要是個(gè)四肢健全、身體健康的人就可以跑步,那這么說(shuō),跑步就是有前提條件的,至少是四肢健全,身體健康。由此可見,殘疾人和老年人如果跑步就會(huì)出問(wèn)題。假設(shè)一個(gè)HumanBase的對(duì)象代表的是一位耄耋老人,如果讓他當(dāng)劉翔的陪練,那就直接光榮了。如何避免這樣的情況呢,我們可以在Run方法中加一段邏輯代碼,先判斷Age大小,如果小于2或大于60直接拋異常,但是2-60歲之間也得用Switch來(lái)分年齡階段地判斷speed參數(shù)是否合適,那么邏輯就相當(dāng)臃腫。簡(jiǎn)而言之,如何用特性表示一個(gè)方法不能被使用呢?OK, here we go:

C#特性代碼5 

上面大致介紹了一下特性的使用與作用,接下來(lái)我們要向大家展示的是如何通過(guò)自定義特性來(lái)提高程序的靈活性,如果特性機(jī)制僅僅能使用.NET提供的那幾種特性,不就太不過(guò)癮了么。

首先,特性也是類。不同于其它類的是,特性都必須繼承自System.Attribute類,否則編譯器如何知道誰(shuí)是特性誰(shuí)是普通類呢。當(dāng)編譯器檢測(cè)到一個(gè)類是特性的時(shí)候,它會(huì)識(shí)別出其中的信息并存放在元數(shù)據(jù)當(dāng)中,僅此而已,編譯器并不關(guān)心特性說(shuō)了些什么,特性也不會(huì)對(duì)編譯器起到任何作用,正如航空公司并不關(guān)心每個(gè)箱子要去哪里,只有箱子的主人和搬運(yùn)工才會(huì)去關(guān)心這些細(xì)節(jié)。假設(shè)我們現(xiàn)在就是航空公司的管理人員,需要設(shè)計(jì)出前面提到的登機(jī)牌,那么很簡(jiǎn)單,我們先看看最主要的信息有哪些:

C#特性代碼6  

我們簡(jiǎn)單列舉這些屬性作為航空公司登機(jī)牌上的信息,用法和前面的一樣,貼到HumanBase上就行了,說(shuō)明此人具備登機(jī)資格。這里要簡(jiǎn)單提一下,你可能已經(jīng)注意到了,在使用BoardingCheckAttribute的時(shí)候已經(jīng)把Attribute省略掉了,不用擔(dān)心,這樣做是對(duì)的,因?yàn)榫幾g器默認(rèn)會(huì)自己加上然后查找這個(gè)屬性類的。哦,等一下,我突然想起來(lái)他該登哪架飛機(jī)呢?顯然,在這種需求下,我們的特性還沒有起到應(yīng)有的作用,我們還的做點(diǎn)兒工作,否則乘客面對(duì)一張空白的機(jī)票一定會(huì)很迷茫。

于是,我們必須給這個(gè)C#特性加上構(gòu)造函數(shù),因?yàn)樗粌H僅表示登機(jī)的資格,還必須包含一些必要的信息才行:

C#特性代碼7 

OK,我們的乘客就可以拿到一張正式的登機(jī)牌登機(jī)了,have a good flight!

C#特性代碼8 

C#特性代碼9 

【編輯推薦】

  1. C#發(fā)送Email郵件的方法解析
  2. 解析C#中is和as操作符的用法
  3. C# Excel COM組件的使用
  4. 如何判斷C#字符串是全角還是半角
  5. C#語(yǔ)言規(guī)范之小結(jié)
責(zé)任編輯:book05 來(lái)源: csdn
相關(guān)推薦

2016-10-13 13:33:41

反射特性c#

2009-05-25 15:42:03

Visual StudC#

2009-08-19 16:50:32

Visual C#C#語(yǔ)言特性

2009-08-04 08:48:44

C#內(nèi)置特性

2019-07-26 06:30:37

CPU代碼操作系統(tǒng)

2009-08-26 17:10:09

C# 3.5新特性

2009-08-25 17:59:49

C#入門

2009-08-04 09:09:51

C#反射

2009-08-04 08:58:01

C#自定義特性

2009-09-17 16:34:24

C#組件類

2009-09-18 15:53:37

C# 3.0新語(yǔ)言特性

2009-08-19 16:51:14

C# 4.0 dyna

2009-08-27 16:24:48

擴(kuò)展方法C# 3.0新特性

2009-09-18 09:59:39

C# CLR

2009-08-13 09:46:49

C#歷史C# 4.0新特性

2009-08-31 14:45:07

Visual C# 3

2009-05-26 09:28:22

C# 4.0dynamic動(dòng)態(tài)類型

2009-08-25 16:32:24

C#語(yǔ)言

2021-03-15 08:18:23

C#反射模塊

2009-05-26 11:15:31

C# 4.0dynamicVisual Stud
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产色| 国产区视频在线观看 | 色偷偷888欧美精品久久久 | 99re视频这里只有精品 | 国产高清视频在线观看 | 男人的天堂久久 | 欧美二区在线 | 久久在视频 | 欧美一区在线视频 | 欧美一级欧美三级在线观看 | 国产伦一区二区三区视频 | 污视频在线免费观看 | 麻豆va | 精品国产乱码久久久久久蜜柚 | 精品伦精品一区二区三区视频 | 久久精品国产免费看久久精品 | 欧美日韩亚洲视频 | 日日夜夜天天 | 久久久久久久久久久久久九 | 自拍偷拍亚洲欧美 | 日韩精品一区二区三区免费观看 | 久久小视频 | 成人久久久 | 亚洲小视频在线观看 | 东方伊人免费在线观看 | 操操操操操 | 罗宾被扒开腿做同人网站 | 日本亚洲欧美 | 国产区精品视频 | 欧美在线不卡 | 国产精久久久 | 国产精品成人国产乱一区 | 国产亚洲黄色片 | 欧美a免费 | 91天堂网 | 欧美成人第一页 | 欧美日韩中文字幕 | 精品福利一区 | 日韩精品视频在线免费观看 | 国产中文字幕在线观看 | 日韩a视频|