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

C# 特性(Attribute)學習
來源:易賢網 閱讀:1565 次 日期:2015-02-12 09:56:28
溫馨提示:易賢網小編為您整理了“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技術專欄

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

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

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
国产精品a久久久久| 中文av一区特黄| 欧美在线观看视频一区二区| 亚洲激情在线| 99热这里只有成人精品国产| 在线视频国产日韩| 亚洲精品乱码久久久久久久久| 国产精品一二三四| 国内精品久久久久影院 日本资源| 国产麻豆精品视频| 老司机午夜精品视频在线观看| 欧美人与性动交a欧美精品| 久久久久欧美精品| 欧美三级欧美一级| 欧美激情在线免费观看| 欧美日韩和欧美的一区二区| 亚洲一区在线直播| 一级成人国产| 久久爱www久久做| 久久riav二区三区| 欧美日韩精品一区二区天天拍小说 | 亚洲欧洲精品成人久久奇米网| 国产一区二区三区久久悠悠色av | 中文精品视频| 91久久精品国产91久久性色| 亚洲一区高清| 亚洲一区二区黄色| 欧美激情一区二区三区高清视频| 欧美国产大片| 国产一区二区三区日韩欧美| 亚洲国产成人高清精品| 亚洲女爱视频在线| 久久精品人人爽| 欧美日韩免费观看中文| 国产精品久久久久久久久久妞妞| 久久亚洲精品欧美| 国产精品美女午夜av| 国产精品国产三级国产普通话三级 | 最新日韩av| 在线观看欧美| 久久国产精品黑丝| 免费成人av在线看| 欧美日韩hd| 国产精品蜜臀在线观看| 国产亚洲人成网站在线观看| 午夜精品99久久免费| 久久久国际精品| 国产一级一区二区| 99国产一区| 亚洲免费影视| 欧美精品在线一区| 亚洲精品久久视频| 久久综合伊人77777蜜臀| 久久婷婷国产综合国色天香| 国产偷久久久精品专区| 亚洲精品1区2区| 久久精品国产久精国产爱| 欧美精品激情blacked18| 亚洲日本视频| 久久精品国产亚洲高清剧情介绍 | 国产精品久久久久久模特| 国产精品v欧美精品v日韩 | 亚洲免费激情| 欧美激情中文不卡| 国产欧美日韩不卡| 欧美专区福利在线| 国产精品第一区| 亚洲欧美国产高清va在线播| 欧美激情网站在线观看| 国产精品视频一| 亚洲女女女同性video| 欧美99在线视频观看| 国产亚洲欧美一区| 在线一区二区日韩| 国产一区久久久| 亚洲午夜av在线| 国产精品毛片va一区二区三区 | 欧美大片va欧美在线播放| 亚洲国产精品ⅴa在线观看| 亚洲欧美在线播放| 国产精品黄色| 一区二区激情视频| 美日韩在线观看| 日韩视频在线你懂得| 久久人人97超碰国产公开结果 | 欧美11—12娇小xxxx| 亚洲精品久久久久久久久久久久| 午夜伦理片一区| 伊人狠狠色丁香综合尤物| 亚洲影院色在线观看免费| 欧美精品一区二区在线播放| 一区二区三区在线免费视频| 亚洲自啪免费| 亚洲国产精品一区二区久 | 亚洲精选在线| 欧美少妇一区| 亚洲美女精品成人在线视频| 欧美四级在线观看| 亚洲桃花岛网站| 影音先锋亚洲精品| 久久亚洲私人国产精品va媚药| 国产精品自拍在线| 久久在线免费观看视频| 国产欧美在线播放| 欧美精品www| 亚洲卡通欧美制服中文| 国产一区二区黄| 久久经典综合| 亚洲视频在线播放| 国产精品乱码妇女bbbb| 欧美激情精品久久久久久变态| 亚洲国产视频a| 国产一区二区久久| 免费看的黄色欧美网站| 激情综合网址| 欧美日韩免费在线视频| 在线综合亚洲欧美在线视频| 亚洲国产片色| 欧美日韩视频在线一区二区| 欧美成年人视频网站| 亚洲精品免费在线| 欧美日韩视频在线第一区| 亚洲免费一在线| 亚洲成人在线| 国产精品免费aⅴ片在线观看| 午夜精品亚洲一区二区三区嫩草| 久久不射2019中文字幕| 91久久综合亚洲鲁鲁五月天| 激情文学综合丁香| 国产精品一区毛片| 99精品免费| 亚洲精品视频中文字幕| 欧美日韩国产色视频| 欧美国产日韩亚洲一区| 亚洲专区在线视频| 欧美日本二区| 久久久久久国产精品mv| 一区二区三区视频在线看| 亚洲精品乱码久久久久久黑人| 国产精品久久婷婷六月丁香| 精品96久久久久久中文字幕无| 国产精品成人一区二区三区夜夜夜 | 午夜免费在线观看精品视频| 国产精品国内视频| 国产精品欧美日韩一区| 久久综合九色| 久久国产精品亚洲77777| 国产精品美女久久久久av超清 | 久久嫩草精品久久久精品一| 亚洲欧美国产制服动漫| 激情欧美日韩| 伊人久久大香线| 欧美日韩你懂的| 欧美日韩国产在线观看| 欧美影院一区| 久久人人爽人人爽| 国产精品久久久久三级| 欧美视频在线不卡| 久久久久网站| 猫咪成人在线观看| 亚洲欧美日本另类| 亚洲在线视频观看| 欧美一级日韩一级| 亚洲欧美综合| 亚洲国产精品999| 亚洲精品中文字| 国产一区二区三区久久悠悠色av| 欧美成人精品激情在线观看| 最新日韩在线视频| 欧美日韩大陆在线| 欧美激情一区二区三区成人| 亚洲欧美日韩第一区| 久久精品久久99精品久久| 亚洲欧美www| 欧美性猛交视频| 欧美精品啪啪| 国产麻豆精品theporn| 国产精品欧美日韩| 永久555www成人免费| 国产一区91| 亚洲精品影院| 亚洲精品之草原avav久久| 亚洲综合电影| 午夜一区二区三区不卡视频| 久久人人97超碰人人澡爱香蕉 | 在线日韩av永久免费观看| 亚洲精品乱码久久久久久黑人 | 久久久之久亚州精品露出| 亚洲——在线| 久久免费视频网| 久久久久久亚洲精品杨幂换脸| 麻豆久久久9性大片| 欧美一区二区三区视频在线观看 | 国产一区视频在线观看免费| 亚洲国产欧美日韩精品| 亚洲第一黄色| 亚洲精品免费电影| 欧美久久久久| 狠狠综合久久| 91久久夜色精品国产九色|