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

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)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
香蕉久久夜色精品国产| 久久久久久一区二区| 日韩亚洲精品在线| 一区福利视频| 亚洲欧美日韩中文视频| 国产精品久久久久久久久免费桃花| 亚洲电影毛片| 欧美电影专区| 在线视频精品| 国产日产精品一区二区三区四区的观看方式 | 韩国v欧美v日本v亚洲v| 亚洲精品永久免费| 欧美三区美女| 欧美伊人久久久久久午夜久久久久| 国产欧美一二三区| 久久综合伊人77777麻豆| 99在线精品观看| 国产视频在线观看一区二区| 欧美日韩综合网| 亚洲午夜一区二区| 亚洲国产精品一区二区www| 亚洲在线1234| 国产欧美日韩高清| 欧美顶级大胆免费视频| 午夜久久电影网| 国产亚洲精品久| 欧美精品九九99久久| 欧美 日韩 国产 一区| 欧美日韩免费网站| 亚洲综合欧美| 韩日视频一区| 国产精品一二三四| 欧美片在线播放| 久久免费视频在线| 亚洲欧美综合国产精品一区| 亚洲人成网站色ww在线| 很黄很黄激情成人| 国产精品五区| 欧美日韩亚洲网| 欧美3dxxxxhd| 久久视频在线免费观看| 性欧美超级视频| 亚洲一区二区成人在线观看| 91久久精品一区二区别| 狠狠色狠狠色综合人人| 国产日韩欧美精品一区| 国产精品久久久久久久久动漫 | 一本色道精品久久一区二区三区| 国产日本亚洲高清| 国产欧美一区二区精品婷婷| 国产精品久久一卡二卡| 国产精品捆绑调教| 国产精品九九| 国产精品播放| 国产精品久久91| 国产精品美女诱惑| 国产精品天天看| 国产精品伊人日日| 国产欧美日韩精品a在线观看| 欧美区高清在线| 亚洲精品国产日韩| 亚洲精品视频中文字幕| 亚洲电影下载| 亚洲你懂的在线视频| 玖玖玖国产精品| 国产嫩草一区二区三区在线观看 | 一区二区高清| 影音先锋一区| 亚洲国产成人在线视频| 国内精品久久久久久久影视蜜臀 | 亚洲欧洲另类国产综合| 黄色综合网站| 亚洲国产91色在线| 亚洲精品小视频在线观看| 在线一区二区三区四区| 欧美一区二区大片| 欧美/亚洲一区| 欧美人与禽猛交乱配视频| 欧美性理论片在线观看片免费| 欧美系列一区| 红桃视频国产精品| 亚洲精品网址在线观看| 亚洲欧美日韩一区在线| 久久精品免费看| 免费不卡在线观看| 欧美调教视频| 伊人精品视频| 亚洲一区二区成人| 欧美成人免费网站| 国产农村妇女精品一区二区| 亚洲激情一区二区三区| 一区二区三区日韩在线观看 | 在线亚洲伦理| 国产精品videosex极品| 久久国产综合精品| 欧美+亚洲+精品+三区| 亚洲天堂男人| 亚洲精品国产精品国自产观看| 精品69视频一区二区三区| 国产毛片一区二区| 亚洲人在线视频| 亚洲欧美变态国产另类| 国产一区白浆| 欧美激情精品久久久六区热门| 亚洲无线一线二线三线区别av| 国产精品老牛| 亚洲男人第一网站| 香蕉久久一区二区不卡无毒影院 | 亚洲精品一区二区三区四区高清| 在线看欧美日韩| 性做久久久久久久免费看| 欧美国产日韩一区二区| 国产精品中文字幕在线观看| 亚洲精品影视| 久久免费99精品久久久久久| 国产亚洲精品aa| 亚洲午夜精品久久久久久浪潮| 欧美日韩一区二区三| 亚洲综合色噜噜狠狠| 久久久青草婷婷精品综合日韩 | 欧美大片免费久久精品三p | 欧美资源在线观看| 欧美午夜激情在线| 久久婷婷国产综合精品青草| 亚洲欧洲一区二区天堂久久| 国产精品久久久久久久午夜| 亚久久调教视频| 亚洲破处大片| 欧美精品久久99久久在免费线| 欧美日韩黄色一区二区| 亚洲在线第一页| 免费看成人av| 亚洲精品欧美一区二区三区| 久久国产一二区| 一区二区三区在线观看视频| 一区二区三区蜜桃网| 亚洲欧美中文另类| 免费欧美日韩| 欧美在线日韩精品| 亚洲网站在线| 久久久久久久久久久久久女国产乱| 国产精品美女黄网| 亚洲欧美三级伦理| 国产视频一区二区三区在线观看| 国产精品99久久久久久久久久久久| 欧美日韩一区二区在线视频| 亚洲婷婷在线| 免费观看日韩av| 欧美激情一二三区| 99在线精品观看| 欧美日韩午夜视频在线观看| 中文国产一区| 国产精品色网| 久久er99精品| 一区二区三区在线免费视频 | 一区精品在线播放| 久久久亚洲精品一区二区三区 | 免费日韩成人| 黄色精品一二区| 噜噜噜噜噜久久久久久91 | 欧美激情中文不卡| 亚洲无毛电影| 国产亚洲成av人片在线观看桃| 久热精品视频在线观看| 99热精品在线观看| avtt综合网| 久久在线视频在线| 久久亚洲精品伦理| 亚洲高清视频在线| 欧美日产国产成人免费图片| 激情偷拍久久| 亚洲视频一区二区| 欧美电影在线播放| 国精产品99永久一区一区| 日韩亚洲欧美成人| 欧美激情无毛| 国产精品99久久久久久宅男 | 亚洲美女啪啪| 久久久人成影片一区二区三区| 亚洲国产精品视频| 国产精品久在线观看| 久久亚洲视频| 一本大道久久a久久精品综合 | 亚洲电影激情视频网站| 欧美日韩三级一区二区| 久久久av水蜜桃| 亚洲午夜精品17c| 在线不卡中文字幕| 国产精品女人久久久久久| 老司机成人在线视频| 亚洲综合三区| 在线视频欧美精品| 亚洲国产精品高清久久久| 国产精品日产欧美久久久久| 欧美激情一区二区三区在线 | 欧美一区三区三区高中清蜜桃| 亚洲乱码视频| 亚洲成色777777在线观看影院| 国产精品视频成人| 欧美午夜电影在线观看|