日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#AttributeUsage的使用淺析

C# AttributeUsage的使用是如何的呢?首先讓我們來了解一下什么是AttributeUsage類它是另外一個(gè)預(yù)定義特性類,AttributeUsage類的作用就是幫助我們控制定制特性的使用。其實(shí)AttributeUsage類就是描述了一個(gè)定制特性如和被使用。

創(chuàng)新互聯(lián)建站于2013年開始,先為興安等服務(wù)建站,興安等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為興安企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

C# AttributeUsage的使用要明白:

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

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

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

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

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

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

 
 
 
  1. using System;   
  2. [AttributeUsage(AttributeTargets.Class), AllowMultiple = false,   
  3.  Inherited = false ]   
  4. public class HelpAttribute : Attribute   
  5. {   
  6.  public HelpAttribute(String Description_in)   
  7.  {   
  8.  this.description = Description_in;   
  9.  }   
  10.  protected String description;   
  11.  public String Description   
  12.  {   
  13.  get   
  14.  {   
  15.  return this.description;   
  16.  }   
  17.  }   

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

 
 
 
  1. [Help("this is a do-nothing class")]   
  2. public class AnyClass   
  3. {   
  4.  [Help("this is a do-nothing method")] //error   
  5.  public void AnyMethod()   
  6.  {   
  7.  }   

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

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

我們可以使用AttributeTargets.All來允許Help特性被放置在任何程序?qū)嶓w前。可能的值是:

 
 
 
  1. Assembly,   
  2. Module,   
  3. Class,   
  4. Struct,   
  5. Enum,   
  6. Constructor,   
  7. Method,   
  8. Property,   
  9. Field,   
  10. Event,   
  11. Interface,   
  12. Parameter,   
  13. Delegate,   
  14. All = Assembly | Module | Class |   
  15. Struct | Enum | Constructor |   
  16. Method | Property | Field | Event |   
  17. Interface | Parameter | Delegate,   
  18. ClassMembers = Class | Struct | Enum |  
  19.  Constructor | Method | Property | Field |  
  20.  Event | Delegate | Interface ) 

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

 
 
 
  1. [Help("this is a do-nothing class")]   
  2. [Help("it contains a do-nothing method")]   
  3. public class AnyClass   
  4. {   
  5.  [Help("this is a do-nothing method")] //error   
  6.  public void AnyMethod()   
  7.  {   
  8.  }   
  9. }  

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

 
 
 
  1. AnyClass.cs: Duplicate 'Help' attribute 

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

 
 
 
  1.  [Help("BaseClass")]   
  2. public class Base   
  3. {   
  4. }   
  5.    
  6. public class Derive : Base   
  7. {   

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

 
 
 
  1. [AttributeUsage(AttributeTargets.Class,  
  2.  AllowMultiple = false, Inherited = false ]   
  3. [AttributeUsage(AttributeTargets.Class,   
  4. AllowMultiple = true, Inherited = false ]   
  5. [AttributeUsage(AttributeTargets.Class,   
  6. AllowMultiple = false, Inherited = true ]   
  7. [AttributeUsage(AttributeTargets.Class,   
  8. AllowMultiple = true, Inherited = true ] 

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

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

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

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

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

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

 
 
 
  1. [Help("BaseClass")]   
  2. public class Base   
  3. {   
  4. }   
  5. [Help("DeriveClass")]   
  6. public class Derive : Base   
  7. {   

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

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

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

C# AttributeUsage的相關(guān)內(nèi)容就向你介紹到這里,希望對(duì)你了解和掌握C# AttributeUsage的使用有所幫助。

【編輯推薦】

  1. RSA實(shí)現(xiàn)C# 加密詳解
  2. 詳解TripleDES實(shí)現(xiàn)C# 加密操作
  3. 淺析C# WinForm控件開發(fā)前期準(zhǔn)備
  4. 詳解C# WinForm自定義控件的使用和調(diào)試
  5. C# Attribute的概念與使用淺析

網(wǎng)頁名稱:C#AttributeUsage的使用淺析
文章網(wǎng)址:http://www.5511xx.com/article/dhhcjic.html