C#特性(Attribute)入門(一)

字號:

# 特性(Attribute)入門(一)
    By sadaf alvi 翻譯:cppbug (itwizard@163.com)
    緒論
    特性(Attributes)是一種嶄新的聲明性信息。我們不僅可以通過特性來定義設計層面的信息(例如help file, URL for documentation)以及運行時(run-time)信息(例如使XML與class相聯(lián)系),而且我們還可以利用特性建立自描述(self-describing)組件。在這篇教程中,我們將會看到如何建立和添加特性到各種程序實體以及如何在運行時環(huán)境中獲取特性信息。
    定義
    正如MSDN中所描述的那樣-----
    “特性是被指定給某一聲明的一則附加的聲明性信息?!?BR>    使用預定義(Pre-defined)特性
    在C#中,有一個小的預定義特性集合。在學習如何建立我們自己的定制特性(custom attributes)之前,我們先來看看在我們的代碼中如何使用預定義特性。
    using System;
    public class AnyClass
    {
    [Obsolete("Dont use Old method, use New method", true)]
    static void Old( ) { }
    static void New( ) { }
    public static void Main( )
    {
    Old( );
    }
    }
    我們先來看一下上面這個例子,在這個例子中我們使用了Obsolete特性,它標記了一個不應該再被使用的程序實體。第一個參數(shù)是一個字符串,它解釋了為什么該實體是過時的以及應該用什么實體來代替它。實際上,你可以在這里寫任何文本。第二個參數(shù)告訴編譯器應該把使用這個過時的程序實體當作一種錯誤。它的默認值是false,也就是說編譯器對此會產(chǎn)生一個警告。
    當我們嘗試編譯上面這段程序的時候,我們將會得到一個錯誤:
    AnyClass.Old() is obsolete: Dont use Old method, use New method
    開發(fā)定制特性(custom attributes)
    現(xiàn)在讓我們來看看如何開發(fā)我們自己的特性。
    首先我們要從System.Attribute派生出我們自己的特性類(一個從System.Attribute抽象類繼承而來的類,不管是直接還是間接繼承,都會成為一個特性類。特性類的聲明定義了一種可以被放置在聲明之上新的特性)。