Attribute基础,园友不用看,浪费您时间
2012-02-01 19:09 海不是蓝 阅读(378) 评论(0) 编辑 收藏 举报
Attribute基础 |
Attribute作用就是为程序添加说明信息,特性都是继承System.Attribute。所有特性都必须是System.Attribute的派生类(别想逆天!)。
特性是个类,这个类很简单,简单到只有基本的字段或属性,别想在特性里面添加方法,这个也是逆天的。
创建个简单的特性
[AttributeUsage(AttributeTargets.All)]
public class TestAttribute : Attribute
{
private string str;
public string Str
{
get { return str; }
set { str = value; }
}
public TestAttribute(string str)
{ this.str = str; }
}
特性前有个AttributeUsage特性,它指明TextAttribute能够应用的范围,这里是所有类型的项。
使用这个特性
[TestAttribute("blah blah blah......")]
public class Test { }
获取Test类上的特性
通常用下面2个方法获取
1.Attribute.GetCustomAttribute
public static Attribute GetCustomAttribute(MemberInfo element, Type attributeType);
2.MemberInfo类中的GetCustomAttributes方法
public abstract object[] GetCustomAttributes(bool inherit);
参数如果为true,那么所有基类的特性都会被包含进来,否则获取指定类型本身定义的特性。
class Program
{
static void Main()
{
Type t = typeof(Test);
Type t1 = typeof(TestAttribute);
TestAttribute ta = (TestAttribute)Attribute.GetCustomAttribute(t, t1);
Console.WriteLine(ta.Str);
Console.WriteLine("---------------------------------------");
object[] obj = t.GetCustomAttributes(false);
foreach (object o in obj)
{
TestAttribute ta1 = (TestAttribute)o;
Console.WriteLine("{0}---{1}", o, ta1.Str);
}
Console.Read();
}
}
特性属性的其它赋值方法
private string str1;
public string Str1
{
get { return str1; }
set { str1 = value; }
}
public TestAttribute(string str)
{
this.str = str;
this.str1 = "null";
}
这个时候多了个str1字段,但是构造函数没有提供外面对他赋值的就会。
这个是的赋值方式就是下面的样子
[TestAttribute("blah blah blah......", Str1 = "123")]
public class Test { }
《clr via c#》的Attribute那一章今天没心情看了,有空看看