C# 中的特性(Attributes)-1

作者:子非魚 來源:子非魚的 blog 日期:2009-1-31

英文原文:http://www.codeproject.com/KB/cs/attributes.aspx

約定

     1.”attribute”和”attributes”均不翻譯

     2.”property”譯為“屬性”

     3.msdn中的原句不翻譯

     4.”program entity”譯為”語言元素”

Attributes in C#

介紹

Attributes是一種新的描述信息,我們既可以使用attributes來定義設計期信息(例如 幫助文件,文檔的URL),還可以用attributes定義運行時信息(例如,使XML中的元素與類的成員字段關聯起來)。我們也可以用attributes來創建一個“自描述”的組件。在這篇指南中我們將明白怎么創建屬性并將其綁定至各種語言元素上,另外我們怎樣在運行時環境下獲取到attributes的一些信息。

定義

MSDN 中做如下定義(ms-help://MS.MSDNQTR.2002APR.1033/csspec/html/vclrfcsharpspec_17_2.htm)

"An attribute is a piece of additional declarative information that is specified for a declaration." 

使用預定義 Attributes

在c#中已有一小組預定義的attributes,在我們學習怎樣創建自定義attributes前,先來了解下在我們的代碼中使用那些預定義的attributes.

using System;
 
public class AnyClass
{
    [Obsolete("Don't use Old method, use New method", true)]
    static void Old( ) { }
   
    static void New( ) { }
   
    public static void Main( )
    {
        Old( );
    }
}

仔細看下該實例,在該實例中我們用到了”Obsolete”attribute,它標記了一個不該再被使用的語言元素(譯者注:這里的元素為方法),該屬性的第一個參數是string類型,它解釋為什么該元素被荒棄,以及我們該使用什么元素來代替它。實際中,我們可以書寫任何其它文本來代替這段文本。第二個參數是告訴編譯器把依然使用這被標識的元素視為一種錯誤,這就意味著編譯器會因此而產生一個警告。

當我們試圖編譯上面的上面的程序,我們會得到如下錯誤:

AnyClass.Old()' is obsolete: 'Don't use Old method,  use New method'

開發自定義Attributes

現在我們即將了解怎么開發自定義的attributes。這兒有個小小處方,有它我們就可以學會創建自定義的attributes。

在C#中,我們的attribute類都派生于System.Attribute類 (A class that derives from the abstract class System.Attribute, whether directly or indirectly, is an attribute class. The declaration of an attribute class defines a new kind of attribute that can be placed on a declaration) ,我們就這么行動吧。

using System;
 
public class HelpAttribute : Attribute
{
 
}

不管你是否相信我,就這樣我們就已經創建了一個自定義attribute。現在就可以用它來裝飾我們的類了,就像我們使用obsolete attribute一樣。

[Help()]
public class AnyClass
{
 
}

注意:按慣例我們是用”Attribute“作為attribute類名的后綴,然而,當我們當我們把attribute綁定到某語言元素時,是不包含“Attribute“后綴的。編譯器首先在System.Attribute 的繼承類中查找該attribute,如果沒有找到,編譯器會把“Attribute“追加到該attribute的名字后面,然后查找它。

但是迄今為止,該attribute沒有任何用處。為了使它有點用處,讓我們在它里面加點東西吧。

using System;
public class HelpAttribute : Attribute
{
    public HelpAttribute(String Descrition_in)
    {
        this.description = Description_in;
    }
    protected String description;
    public String Description
    {
        get
        {
            return this.description;
        }
    }
}

[Help("this is a do-nothing class")]
public class AnyClass
{
}

在上面的例子中,我們在attribute類中添加了一個屬性,在最后一節中,我們將在運行時查詢該屬性。

你前面那位網友看了:IE7 中判斷剪貼板操作是否成功

相關文章
文章評論
標題:必填
內容:
最新22选5开奖公告