今天回头看看 反射这块,收获颇大啊,下面好好记录这个反射的具体应用。迫不及待吃饭回来写一篇。
先说说特性吧,attribute,这个东西我的个人理解是,就是一个类,或者方法,或者其他什么类型的一种具体的属性,里面包含了许多信息,当你要用的时候你可以提取出来使用,这里最重要的当然是自定义的attribute,下面我来结合attribute和反射来达到这个目的。
先自定义一个attribute,如下 :
[System.AttributeUsage(AttributeTargets.Class,AllowMultiple=true)]//这个我定义的是针对class类型的,不适合其他的,这里必须继承system.Attribute!
public class author:System.Attribute
{
private string name;
public int version;
public author(string name,int version)
{
this.name = name;
this.version = version;
}
public string getName()
{
return name;
}
public int getVersion()
{
return version;
}
}
//下面我来给两个class来指定attribute如下
[author("guodongliang", 2)]//根据上面的定义,我指定这个作者是guodongliang,版本号是2
public class test1
{
}
[author("guodongliang",1)])]//根据上面的定义,我指定这个作者是guodongliang,版本号是2
public class test2
{
}
那么怎么把这些信息取出来呢?这里就是反射出场的时候了
public void reflect()
{
System.Attribute[] attrs = System.Attribute.GetCustomAttributes(typeof(test1));//利用反射取出class test1的attribute信息
foreach (System.Attribute attr in attrs)
{
if (attr is author)//如果这个特性是author
{
author a = (author)attr;//实例化他
System.Console.Write("test1 anthor is{0},version is{1}", a.getName(), a.getVersion());//调试发现这里就可以取出相应的信息了
System.Console.Read();
}
}
}
小结一下:这里我只是取得名字这些东西,没有什么特殊的用途,你可以想象一下,如果这放的是这个对象或者方法对应的一个sql表,或者其他什么东西的话,那么你是不是可以很方便的取到这些信息并加以利用呢?自己琢磨一下吧