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