中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

C# 特性(Attribute)學習
來源:易賢網 閱讀:1241 次 日期:2015-03-23 15:49:19
溫馨提示:易賢網小編為您整理了“C# 特性(Attribute)學習”,方便廣大網友查閱!

特性(attribute)是被指定給某一聲明的一則附加的聲明性信息。

在C#中,有一個小的預定義特性集合。在學習如何建立我們自己的定制特性(custom 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特性,它標記了一個不應該再被使用的程序實體。第一個參數是一個字符串,它解釋了為什么該實體是過時的以及應該用什么實體來代替它。實際上,你可以在這里寫任何文本。第二個參數告訴編譯器應該把使用這個過時的程序實體當作一種錯誤。它的默認值是false,也就是說編譯器對此會產生一個警告。

當我們嘗試編譯上面這段程序的時候,我們將會得到一個錯誤:

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

開發定制特性(custom attributes)

現在讓我們來看看如何開發我們自己的特性。

首先我們要從System.Attribute派生出我們自己的特性類(一個從System.Attribute抽象類繼承而來的類,不管是直接還是間接繼承,都會成為一個特性類。特性類的聲明定義了一種可以被放置在聲明之上新的特性)。

using System;

public class HelpAttribute : Attribute

{

}

不管你是否相信,我們已經建立了一個定制特性,現在我們可以用它來裝飾現有的類就好像上面我們使用Obsolete attribute一樣。

[Help()]

public class AnyClass

{

}

注意:對一個特性類名使用Attribute后綴是一個慣例。然而,當我們把特性添加到一個程序實體,是否包括Attribute后綴是我們的自由。編譯器會首先在System.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

{

}

在上面的例子中,我們給HelpAttribute特性類添加了一個屬性并且在后續的部分中我們會在運行時環境中查尋它。

定義或控制特性的使用

AttributeUsage類是另外一個預定義特性類,它幫助我們控制我們自己的定制特性的使用。它描述了一個定制特性如和被使用。

AttributeUsage有三個屬性,我們可以把它放置在定制屬性前面。第一個屬性是:

ValidOn

通過這個屬性,我們能夠定義定制特性應該在何種程序實體前放置。一個屬性可以被放置的所有程序實體在AttributeTargets enumerator中列出。通過OR操作我們可以把若干個AttributeTargets值組合起來。

AllowMultiple

這個屬性標記了我們的定制特性能否被重復放置在同一個程序實體前多次。

Inherited

我們可以使用這個屬性來控制定制特性的繼承規則。它標記了我們的特性能否被繼承。

下面讓我們來做一些實際的東西。我們將會在剛才的Help特性前放置AttributeUsage特性以期待在它的幫助下控制Help特性的使用。

using System;

[AttributeUsage(AttributeTargets.Class), AllowMultiple = false,

Inherited = false ]

public class HelpAttribute : Attribute

{

public HelpAttribute(String Description_in)

{

this.description = Description_in;

}

protected String description;

public String Description

{

get

{

return this.description;

}

}

}

先讓我們來看一下AttributeTargets.Class。它規定了Help特性只能被放在class的前面。這也就意味著下面的代碼將會產生錯誤:

[Help("this is a do-nothing class")]

public class AnyClass

{

[Help("this is a do-nothing method")] //error

public void AnyMethod()

{

}

}

編譯器報告錯誤如下:

AnyClass.cs: Attribute 'Help' is not valid on this declaration type.

It is valid on 'class' declarations only.

我們可以使用AttributeTargets.All來允許Help特性被放置在任何程序實體前。可能的值是:

Assembly,Module,Class,Struct,Enum,Constructor,Method,Property,Field,Event,Interface,

Parameter,Delegate。

All = Assembly | Module | Class | Struct | Enum | Constructor | Method | Property | Field | Event | Interface | Parameter | Delegate,

ClassMembers = Class | Struct | Enum | Constructor | Method | Property | Field | Event | Delegate | Interface )

下面考慮一下AllowMultiple = false。它規定了特性不能被重復放置多次。

[Help("this is a do-nothing class")]

[Help("it contains a do-nothing method")]

public class AnyClass

{

[Help("this is a do-nothing method")] //error

public void AnyMethod()

{

}

}

它產生了一個編譯期錯誤。

AnyClass.cs: Duplicate 'Help' attribute

Ok,現在我們來討論一下最后的這個屬性。Inherited, 表明當特性被放置在一個基類上時,它能否被派生類所繼承。

[Help("BaseClass")]

public class Base

{

}

public class Derive : Base

{

}

這里會有四種可能的組合:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false ]

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false ]

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true ]

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true ]

第一種情況:

如果我們查詢(Query)(稍后我們會看到如何在運行期查詢一個類的特性)Derive類,我們將會發現Help特性并不存在,因為inherited屬性被設置為false。

第二種情況:

和第一種情況相同,因為inherited也被設置為false。

第三種情況:

為了解釋第三種和第四種情況,我們先來給派生類添加點代碼:

[Help("BaseClass")]

public class Base

{

}

[Help("DeriveClass")]

public class Derive : Base

{

}

現在我們來查詢一下Help特性,我們只能得到派生類的屬性,因為inherited被設置為true,但是AllowMultiple卻被設置為false。因此基類的Help特性被派生類Help特性覆蓋了。

第四種情況:

在這里,我們將會發現派生類既有基類的Help特性,也有自己的Help特性,因為AllowMultiple被設置為true。

定義或控制特性的使用

AttributeUsage類是另外一個預定義特性類,它幫助我們控制我們自己的定制特性的使用。它描述了一個定制特性如和被使用。

AttributeUsage有三個屬性,我們可以把它放置在定制屬性前面。第一個屬性是:

ValidOn

通過這個屬性,我們能夠定義定制特性應該在何種程序實體前放置。一個屬性可以被放置的所有程序實體在AttributeTargets enumerator中列出。通過OR操作我們可以把若干個AttributeTargets值組合起來。

AllowMultiple

這個屬性標記了我們的定制特性能否被重復放置在同一個程序實體前多次。

Inherited

我們可以使用這個屬性來控制定制特性的繼承規則。它標記了我們的特性能否被繼承。

下面讓我們來做一些實際的東西。我們將會在剛才的Help特性前放置AttributeUsage特性以期待在它的幫助下控制Help特性的使用。

using System;

[AttributeUsage(AttributeTargets.Class), AllowMultiple = false,

Inherited = false ]

public class HelpAttribute : Attribute

{

public HelpAttribute(String Description_in)

{

this.description = Description_in;

}

protected String description;

public String Description

{

get

{

return this.description;

}

}

}

先讓我們來看一下AttributeTargets.Class。它規定了Help特性只能被放在class的前面。這也就意味著下面的代碼將會產生錯誤:

[Help("this is a do-nothing class")]

public class AnyClass

{

[Help("this is a do-nothing method")] //error

public void AnyMethod()

{

}

}

編譯器報告錯誤如下:

AnyClass.cs: Attribute Help is not valid on this declaration type.

It is valid on class declarations only.

我們可以使用AttributeTargets.All來允許Help特性被放置在任何程序實體前。可能的值是:

Assembly,

Module,

Class,

Struct,

Enum,

Constructor,

Method,

Property,

Field,

Event,

Interface,

Parameter,

Delegate,

All = Assembly | Module | Class | Struct | Enum | Constructor | Method | Property | Field | Event | Interface | Parameter | Delegate, 下面考慮一下AllowMultiple = false。它規定了特性不能被重復放置多次。

[Help("this is a do-nothing class")]

[Help("it contains a do-nothing method")]

public class AnyClass

{

[Help("this is a do-nothing method")] //error

public void AnyMethod()

{

}

}

它產生了一個編譯期錯誤。

AnyClass.cs: Duplicate Help attribute

Ok,現在我們來討論一下最后的這個屬性。Inherited, 表明當特性被放置在一個基類上時,它能否被派生類所繼承。

[Help("BaseClass")]

public class Base

{

}

public class Derive : Base

{

}

這里會有四種可能的組合:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false ]

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false ]

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true ]

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true ]

第一種情況:

如果我們查詢(Query)(稍后我們會看到如何在運行期查詢一個類的特性)Derive類,我們將會發現Help特性并不存在,因為inherited屬性被設置為false。

第二種情況:

和第一種情況相同,因為inherited也被設置為false。

第三種情況:

為了解釋第三種和第四種情況,我們先來給派生類添加點代碼:

[Help("BaseClass")]

public class Base

{

}

[Help("DeriveClass")]

public class Derive : Base

{

}

現在我們來查詢一下Help特性,我們只能得到派生類的屬性,因為inherited被設置為true,但是AllowMultiple卻被設置為false。因此基類的Help特性被派生類Help特性覆蓋了。

第四種情況:

在這里,我們將會發現派生類既有基類的Help特性,也有自己的Help特性,因為AllowMultiple被設置為true。

ClassMembers = Class | Struct | Enum | Constructor | Method | Property | Field | Event | Delegate | Interface )

更多信息請查看IT技術專欄

更多信息請查看技術文章
易賢網手機網站地址:C# 特性(Attribute)學習
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
午夜精品视频网站| 久久亚洲捆绑美女| 国产精品激情| 亚洲二区在线| 亚洲手机成人高清视频| 亚洲精品123区| 亚欧美中日韩视频| 欧美日本在线看| 国产农村妇女精品| 久久久久五月天| 欧美主播一区二区三区| 国产精品久久久久久久9999| 久久精品夜色噜噜亚洲aⅴ| 日韩午夜电影在线观看| 国产精品任我爽爆在线播放| 99这里只有精品| 欧美国产视频一区二区| 久久成人18免费观看| 老司机精品导航| 欧美日韩国产综合网| 国产精品色婷婷| 亚洲成人原创| 在线观看欧美日韩国产| 在线日韩中文字幕| 99精品国产在热久久| 国内自拍亚洲| 欧美精品免费看| 国产综合色精品一区二区三区 | 亚洲承认在线| 国产精品无码永久免费888| 亚洲欧美在线播放| 欧美福利视频在线观看| 亚洲欧美日韩一区二区三区在线| 久热国产精品| 欧美在线综合| 欧美精品一区二区三区在线看午夜 | 国产综合18久久久久久| 免费成人性网站| 欧美r片在线| 欧美午夜激情小视频| 久久久亚洲人| 久久欧美肥婆一二区| 欧美激情一区二区三区高清视频| 欧美日韩综合不卡| 久久国产天堂福利天堂| 国产在线播精品第三| 美脚丝袜一区二区三区在线观看| 欧美一区二区三区男人的天堂 | 欧美a级片网| 亚洲美女在线一区| 1024欧美极品| 午夜精品久久久久久久男人的天堂| 1024成人| 欧美性一区二区| 国产精品xxxxx| 国产精品99久久不卡二区| 欧美成年网站| 亚洲人成小说网站色在线| 欧美日韩亚洲一区二区三区在线观看 | 国产一区二区日韩精品| 欧美韩日亚洲| 欧美h视频在线| 伊人久久婷婷| 国产主播一区二区三区| 激情欧美一区二区三区| 欧美日韩网址| 国内外成人在线视频| 亚洲午夜av在线| 亚洲精品久久7777| 国产一区自拍视频| 在线成人www免费观看视频| 国产一区二区三区的电影 | 99国产欧美久久久精品| 欧美精品在线观看一区二区| 亚洲欧美日韩精品久久久| 蜜桃av综合| 日韩午夜中文字幕| 欧美国产日韩一区二区在线观看| 亚洲婷婷综合色高清在线| 亚洲国产精品v| 国产精品国产自产拍高清av王其 | 久久成人免费电影| 国产亚洲精品bt天堂精选| 国产欧美一区二区精品仙草咪| 国产精品欧美日韩一区二区| 国产精品亚洲一区二区三区在线| 国产精品资源| 国产亚洲欧美在线| 1204国产成人精品视频| 欧美午夜女人视频在线| 韩国三级电影久久久久久| 一区二区三区av| 欧美在线视频全部完| 久久漫画官网| 国产精品视频自拍| 美女视频一区免费观看| 欧美一级淫片aaaaaaa视频| 久久精品网址| 亚洲精品四区| 一区二区在线免费观看| 尤物精品在线| 欧美国产精品久久| 欧美日韩亚洲国产精品| 国产精品扒开腿做爽爽爽视频| 欧美午夜在线视频| 国产手机视频一区二区| 国产精品日韩精品欧美在线| 久久久久久久久久久久久女国产乱 | 欧美一区亚洲一区| 亚洲国产日韩在线一区模特| 欧美另类专区| 欧美激情第二页| 欧美激情在线狂野欧美精品| 欧美日韩大陆在线| 欧美伦理在线观看| 国产欧美日韩在线播放| 国产综合网站| 欧美日韩国产va另类| 亚洲女优在线| 亚洲人成免费| 影音先锋久久资源网| 国产欧美日韩视频在线观看| 欧美视频在线观看一区| 欧美劲爆第一页| 欧美另类综合| 欧美色欧美亚洲高清在线视频| 另类尿喷潮videofree| 亚洲欧美日韩国产精品| 亚洲视频一二三| 欧美中文字幕在线观看| 久久亚洲二区| 国产精品日韩二区| 亚洲福利一区| 性欧美1819sex性高清| 欧美日韩美女在线观看| 国产一区二区av| 欧美中文在线视频| 国产欧美在线| 午夜精品亚洲一区二区三区嫩草| 野花国产精品入口| 欧美成人在线免费观看| 亚洲国产日韩在线| 亚洲在线黄色| 国产三级精品在线不卡| 久久久久**毛片大全| 在线观看日韩国产| 亚洲自拍偷拍视频| 欧美尤物巨大精品爽| 亚洲电影在线| 欧美精品v日韩精品v国产精品| 国产精品久久777777毛茸茸| 羞羞答答国产精品www一本| 欧美性天天影院| 亚洲伊人色欲综合网| 欧美黄免费看| 在线欧美日韩国产| 欧美日韩精品免费观看视频| 亚洲一区二区不卡免费| 国产一区二区三区四区在线观看 | 最新日韩中文字幕| 欧美日韩理论| 久久综合狠狠综合久久激情| 99视频日韩| 国产精品你懂的| 国产日韩欧美综合一区| 激情久久影院| 日韩视频一区二区在线观看| 99精品国产一区二区青青牛奶| 久久综合精品一区| 欧美日本免费一区二区三区| 一区二区在线视频| 亚洲国产成人在线视频| 免费视频一区二区三区在线观看| 亚洲三级性片| 欧美片第一页| 亚洲一二三区在线观看| 国产欧美一区二区三区另类精品| 欧美在线视频全部完| 欧美精品一区二区三| 99亚洲一区二区| 国产精品久久久久久久久婷婷| 欧美在线1区| 亚洲国产午夜| 欧美成人蜜桃| 亚洲在线黄色| 激情五月婷婷综合| 欧美日本二区| 91久久国产综合久久蜜月精品| 久久久久综合网| 久久香蕉精品| 在线免费观看日本欧美| 久久久91精品国产| 夜夜嗨av一区二区三区免费区| 国产精品一区二区三区四区五区 | 欧美日韩dvd在线观看| 亚洲视频中文| 亚洲第一级黄色片| 欧美激情一区二区三区在线视频观看 | 久久黄色网页| 国产日韩欧美在线看|