溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C# 中AttributeUsage如何使用

發(fā)布時(shí)間:2021-07-07 17:50:15 來(lái)源:億速云 閱讀:397 作者:Leah 欄目:編程語(yǔ)言

本篇文章給大家分享的是有關(guān)C# 中AttributeUsage如何使用,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

C# AttributeUsage的使用要明白:

AttributeUsage有三個(gè)屬性,我們可以把它放置在定制屬性前面。***個(gè)屬性是:

◆ValidOn 

通過(guò)這個(gè)屬性,我們能夠定義定制特性應(yīng)該在何種程序?qū)嶓w前放置。一個(gè)屬性可以被放置的所有程序?qū)嶓w在AttributeTargets enumerator中列出。通過(guò)OR操作我們可以把若干個(gè)AttributeTargets值組合起來(lái)。

◆AllowMultiple 
 
這個(gè)屬性標(biāo)記了我們的定制特性能否被重復(fù)放置在同一個(gè)程序?qū)嶓w前多次。

◆Inherited 

我們可以使用這個(gè)屬性來(lái)控制定制特性的繼承規(guī)則。它標(biāo)記了我們的特性能否被繼承。

C# AttributeUsage的使用實(shí)例:

下面讓我們來(lái)做一些實(shí)際的東西。我們將會(huì)在剛才的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;    }    }   }

先讓我們來(lái)看一下AttributeTargets.Class。它規(guī)定了Help特性只能被放在class的前面。這也就意味著下面的代碼將會(huì)產(chǎn)生錯(cuò)誤:

[Help("this is a do-nothing class")]   public class AnyClass   {    [Help("this is a do-nothing method")] //error    public void AnyMethod()    {    }   }

編譯器報(bào)告錯(cuò)誤如下:

AnyClass.cs: Attribute 'Help' is not valid on this declaration type.   It is valid on 'class' declarations only.

我們可以使用AttributeTargets.All來(lái)允許Help特性被放置在任何程序?qū)嶓w前??赡艿闹凳牵?/p>

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。它規(guī)定了特性不能被重復(fù)放置多次。

[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()    {    }   }

它產(chǎn)生了一個(gè)編譯期錯(cuò)誤。

AnyClass.cs: Duplicate 'Help' attribute

Ok,現(xiàn)在我們來(lái)討論一下***的這個(gè)屬性。Inherited, 表明當(dāng)特性被放置在一個(gè)基類(lèi)上時(shí),它能否被派生類(lèi)所繼承。

 [Help("BaseClass")]   public class Base   {   }      public class Derive : Base   {   }

C# AttributeUsage的使用會(huì)有四種可能的組合:

[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 ]

C# AttributeUsage的使用***種情況:

如果我們查詢(xún)(Query)(稍后我們會(huì)看到如何在運(yùn)行期查詢(xún)一個(gè)類(lèi)的特性)Derive類(lèi),我們將會(huì)發(fā)現(xiàn)Help特性并不存在,因?yàn)閕nherited屬性被設(shè)置為false。

C# AttributeUsage的使用第二種情況:

和***種情況相同,因?yàn)閕nherited也被設(shè)置為false。

C# AttributeUsage的使用第三種情況:

為了解釋第三種和第四種情況,我們先來(lái)給派生類(lèi)添加點(diǎn)代碼:

[Help("BaseClass")]   public class Base   {   }   [Help("DeriveClass")]   public class Derive : Base   {   }

現(xiàn)在我們來(lái)查詢(xún)一下Help特性,我們只能得到派生類(lèi)的屬性,因?yàn)閕nherited被設(shè)置為true,但是AllowMultiple卻被設(shè)置為false。因此基類(lèi)的Help特性被派生類(lèi)Help特性覆蓋了。

C# AttributeUsage的使用第四種情況:

在這里,我們將會(huì)發(fā)現(xiàn)派生類(lèi)既有基類(lèi)的Help特性,也有自己的Help特性,因?yàn)锳llowMultiple被設(shè)置為true。

以上就是C# 中AttributeUsage如何使用,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI