您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > Nunit
從NUnit中理解.NET自定義屬性的應(yīng)用
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/28 13:26:34 ] 推薦標(biāo)簽:

摘要:

  .net的自定義屬性可以實(shí)現(xiàn)程序集元數(shù)據(jù)擴(kuò)展,并能為框架設(shè)計(jì)和實(shí)現(xiàn)提供新的思路和解決辦法。NUnit即是一個(gè)很好的例子。

1.屬性概述

  .NET的元數(shù)據(jù)體系是.NET Framework的亮點(diǎn)之一。利用元數(shù)據(jù)可以對程序集、模塊、類型、方法、成員等進(jìn)行某種特性描述,而這些描述將作為元數(shù)據(jù)被編譯到程序集中,并通過.NET運(yùn)行環(huán)境為其調(diào)用者所使用。這也即元數(shù)據(jù)擴(kuò)展。

  屬性(Attribute)的定義和使用是元數(shù)據(jù)擴(kuò)展的主要內(nèi)容。這包括對.NET標(biāo)準(zhǔn)屬性的使用和自定義屬性。

  注:“屬性”是漢化MSDN對本文所討論的概念—Attribute的翻譯,我也習(xí)慣這么說。這好像很容易和OO中的“屬性”混淆。有些同類討論中,將此翻譯為“標(biāo)簽”、“標(biāo)記”,請注意區(qū)分。

  也許開發(fā)者對屬性還感覺比較陌生,對其如何發(fā)揮作用也沒有什么感性認(rèn)識。但其實(shí)在日常的開發(fā)中,.NET開發(fā)者來已經(jīng)在大量使用.NET的標(biāo)準(zhǔn)屬性。如:

  當(dāng)要引用某個(gè)傳統(tǒng)動態(tài)連接庫中的函數(shù)時(shí),我們常用到DllImportAttribute標(biāo)準(zhǔn)屬性來注釋某個(gè)函數(shù)的原型:

[DllImport(“user32.dll”)]

public static extern intMessageBoxA(intp,stringm,stringh,intt);

//…

  又比如,在編寫Web Service時(shí)會使用到WebServiceAttribute和WebMethodAttribute屬性。[WebService]和[WebMethod]會在生成WSDL時(shí)發(fā)揮作用,為我們生成相應(yīng)的Web Service描述,下面的代碼片段開發(fā)者是多么的熟悉:

[WebMethod]

public stringHelloWorld()

//…

  這些屬性直接對程序集中的類型或類型成員進(jìn)行注釋,并且這樣的注釋可以影響相應(yīng)程序集的編譯、邏輯、運(yùn)行等。.NET Framework帶有很多標(biāo)準(zhǔn)的屬性,并在MSDN中有詳細(xì)的文檔。

2.自定義屬性

  屬性也可以自定義,即自行開發(fā)屬性,對屬性進(jìn)行某種格式的定義,并利用屬性來影響開發(fā)者自己開發(fā)的程序集。這也是.NET元數(shù)據(jù)擴(kuò)展直接的應(yīng)用了。自定義的屬性在編譯時(shí)作為元數(shù)據(jù)被編譯到程序集中,在運(yùn)行時(shí)可以利用反射機(jī)制(Reflection)被讀取。

  .NET中的屬性是以一個(gè)類的形式來定義的。幾乎所有的屬性都繼承自System.Attribute,開發(fā)者自定義屬性也需首先繼承自該抽象類。

圖1:System.Attribute是所有屬性的基類

  自定義屬性可以用于對程序集中的元素進(jìn)行標(biāo)記和描述,并被編譯到.NET程序集中,成為其元數(shù)據(jù)的一部分。而從屬性和屬性值的讀取是對.NET程序集元數(shù)據(jù)的讀取,這會用到反射機(jī)制。具體如何編寫自定義屬性和如何讀取屬性的例子在MSDN中有很多,不再冗述了。

上一頁123下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd