程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> [開發故事]第四回:應用反射在運行時動態獲取類型信息

[開發故事]第四回:應用反射在運行時動態獲取類型信息

編輯:關於ASP.NET

引言

網友hbfly,對於我在[你必須知道的.NET]第三十回:.NET十年(下)一文中 關於“當應用attribute進行運行時反射”的論述,希望舉例說明,他提出了自己 的想法:[你必須知道的.NET]第二十四回:認識元數據和IL(上)[你必須知道的.NET]第二十五回:認識元數據和IL(中)[你必須知道的.NET]第二十六回:認識元數據和IL(下)

[MyAttribute("text.....")]
public mymethod()
{
   //我可以再方法內部得到attrib的text嗎?
}

我的回答是:當然可以了:-)那麼,關於怎麼做,就是個小問題。

呵呵,那麼我們就一個小例子來技術如何在運行時通過反射獲取MyAttribute 中的字符串信息。

實現

既然是在運行時動態獲取信息,那麼這意味著我們可以通過反射獲取任何類型 信息,包括:Type、MethodInfo、PropertyInfo、FieldInfo、ParameterInfo都 是可以手到擒來的。通過反射如何獲取,而這些信息如何而來,我用三篇文章對 此進行過詳細的論述:

[你必須知道的.NET]第二十四回:認識元數據和IL(上)

[你必須知道的.NET]第二十五回:認識元數據和IL(中)

[你必須知道的.NET]第二十六回:認識元數據和IL(下)

有興趣可以參考一下。

所以,動態獲取類型信息,是反射的拿手好戲,為了做以簡單的說明,我就針 對hbfly提出的問題實現一個解決方案,首先實現一個自定義的TextAttribute:

// Release : code01, 2009/05/12
// Author : Anytao, http://www.anytao.com
[AttributeUsage(AttributeTargets.Class, Inherited = false,  AllowMultiple = false)]
public sealed class TextAttribute : Attribute
{
   private readonly string text;

   public TextAttribute(string text)
   {
     this.text = text;
   }

   public string Text
   {
     get { return this.text; }
   }
}

其中定義了一個Text字段用於標記在運行時獲取的信息,例如:

// Release : code02, 2009/05/12
// Author : Anytao, http://www.anytao.com
[Text("Hello, Anytao")]
public class Hello
{
}

那麼,我們的目的就是在運行時動態獲取為Hello類標識的“Hello, Anytao” 信息。

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