程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Attribute在.net編程中的應用(二)

Attribute在.net編程中的應用(二)

編輯:C#入門知識

.NET Framework中對Attribute的支持是一個全新的功能,這種支持來自它的Attribute類。在你的程序中適當地使用這個類,或者是靈活巧妙地利用這個類,將使你的程序獲得某種在以往編程中很難做到的能力。我們來看一個例子:
假如你是一個項目開發小組中的成員,你想要跟蹤項目代碼檢查的信息,通常你可以把代碼的檢查信息保存在數據庫中以便查詢;或者把信息寫到代碼的注釋裡面,這樣可以閱讀代碼的同時看到代碼被檢查的信息。我們知道.NET的組件是自描述的,那麼是否可以讓代碼自己來描述它被檢查的信息呢?這樣我們既可以將信息和代碼保存在一起,又可以通過代碼的自我描述得到信息。答案就是使用Attribute.
下面的步驟和代碼告訴你怎麼做:
首先,我們創建一個自定義的Attribute,並且事先設定我們的Attribute將施加在class的元素上面以獲取一個類代碼的檢查信息。
 

using System;
using System.Reflection;
 
[AttributeUsage(AttributeTargets.Class)] //還記得上一節的內容嗎?
public class CodeReviewAttribute : System.Attribute //定義一個CodeReview的Attribute
{
 private string reviewer;  //代碼檢查人
 private string date;      //檢查日期
 private string comment;   //檢查結果信息

 //參數構造器
 public CodeReviewAttribute(string reviewer, string date)
 {
  this.reviewer=reviewer;
  this.date=date;
 }

 public string Reviewer
 {
  get
  {
   return reviewer;
  }
 }

 public string Date
 {
  get
  {
   return date;
  }
 }

 public string Comment
 {
  get
  {
   return comment;
  }
  set
  {
   comment=value;
  }
 }
}


 

我們的自定義CodeReviewAttribute同普通的類沒有區別,它從Attribute派生,同時通過AttributeUsage表示我們的Attribute僅可以施加到類元素上。

第二步就是使用我們的CodeReviewAttribute, 假如我們有一個Jack寫的類MyClass,檢查人Niwalker,檢查日期2003年7月9日,於是我們施加Attribute如下:

[CodeReview("Niwalker","2003-7-9",Comment="Jack的代碼")]
public class MyClass
{
 //類的成員定義
} 

當這段代碼被編譯的時候,編譯器會調用CodeReviewAttribute的構造器並且把"Niwalker"和"2003-7-9"分別作為構造器的參數。注意到參數表中還有一個Comment屬性的賦值,這是Attribute特有的方式,這裡你可以設置更多的Attribute的公共屬性(如果有的話),需要指出的是.NET Framework1.0允許向private的屬性賦值,但在.NET Framework1.1已經不允許這樣做,只能向public的屬性賦值。

第三步就是取出我們需要的信息,這是通過.NET的反射來實現的,關於反射的知識,限於篇幅我不打算在這裡進行說明,也許我會在以後另外寫一篇介紹反射的文章。

class test
{
   static void Main(string[] args)
   {
      System.Reflection.MemberInfo info=typeof(MyClass); //通過反射得到MyClass類的信息

//得到施加在MyClass類上的定制Attribute 
      CodeReviewAttribute att=
                 (CodeReviewAttribute)Attribute.GetCustomAttribute(info,typeof(CodeReviewAttribute)); 
      if(att!=null)
      {
          Console.WriteLine("代碼檢查人:{0}",att.Reviewer);
          Console.WriteLine("檢查時間:{0}",att.Date);
          Console.WriteLine("注釋:{0}",att.Comment);
      }
   }
}

在上面這個例子中,Attribute扮演著向一個類添加額外信息的角色,它並不影響MyClass類的行為。通過這個例子,我們大致可以知道如何寫一個自定義的Attribute,以及如何在應用程序使用它。下一節,我將介紹如何使用Attribute來自動生成ADO.NET的數據訪問類的代碼。
 

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved