引言
網友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” 信息。