.NET 特性Attribute
Attribute类
除了.NET内置提供的一些特性外,我们当然也可以自定义自己的Attribute。需要知道的中,所有自定义的Attribute都必须派生自类Attribute。在开发自定义的Attribute的时候,还有一点需要注意的是特性可以施加到不同的元素中,如方法,属性,类,参数等。有时候我们可能希望自定义的特性只允许施加到类中,这时还可以使用AttributeUsage限定特性的使用范围。
以下给出一个使用示例
using System;
namespace AttTargsCS
{
// 该Attribute只对类有效.
[AttributeUsage(AttributeTargets.Class)]
public class ClassTargetAttribute : Attribute
{
}
// 该Attribute只对方法有效.
[AttributeUsage(AttributeTargets.Method)]
public class MethodTargetAttribute : Attribute
{
}
// 该Attribute只对构造器有效。
[AttributeUsage(AttributeTargets.Constructor)]
public class ConstructorTargetAttribute : Attribute
{
}
// 该Attribute只对字段有效.
[AttributeUsage(AttributeTargets.Field)]
public class FieldTargetAttribute : Attribute
{
}
// 该Attribute对类或者方法有效(组合).
[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)]
public class ClassMethodTargetAttribute : Attribute
{
}
// 该Attribute对所有的元素有效.
[AttributeUsage(AttributeTargets.All)]
public class AllTargetsAttribute : Attribute
{
}
//上面定义的Attribute施加到程序元素上的用法
[ClassTarget] //施加到类
[ClassMethodTarget]//施加到类
[AllTargets] //施加到类
public class TestClassAttribute
{
[ConstructorTarget] //施加到构造器
[AllTargets] //施加到构造器
TestClassAttribute()
{
}
[MethodTarget] //施加到方法
[ClassMethodTarget] //施加到方法
[AllTargets] //施加到方法
public void Method1()
{
}
[FieldTarget] //施加到字段
[AllTargets] //施加到字段
public int myInt;
static void Main(string[] args)
{
}
}
}
namespace AttTargsCS
{
// 该Attribute只对类有效.
[AttributeUsage(AttributeTargets.Class)]
public class ClassTargetAttribute : Attribute
{
}
// 该Attribute只对方法有效.
[AttributeUsage(AttributeTargets.Method)]
public class MethodTargetAttribute : Attribute
{
}
// 该Attribute只对构造器有效。
[AttributeUsage(AttributeTargets.Constructor)]
public class ConstructorTargetAttribute : Attribute
{
}
// 该Attribute只对字段有效.
[AttributeUsage(AttributeTargets.Field)]
public class FieldTargetAttribute : Attribute
{
}
// 该Attribute对类或者方法有效(组合).
[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)]
public class ClassMethodTargetAttribute : Attribute
{
}
// 该Attribute对所有的元素有效.
[AttributeUsage(AttributeTargets.All)]
public class AllTargetsAttribute : Attribute
{
}
//上面定义的Attribute施加到程序元素上的用法
[ClassTarget] //施加到类
[ClassMethodTarget]//施加到类
[AllTargets] //施加到类
public class TestClassAttribute
{
[ConstructorTarget] //施加到构造器
[AllTargets] //施加到构造器
TestClassAttribute()
{
}
[MethodTarget] //施加到方法
[ClassMethodTarget] //施加到方法
[AllTargets] //施加到方法
public void Method1()
{
}
[FieldTarget] //施加到字段
[AllTargets] //施加到字段
public int myInt;
static void Main(string[] args)
{
}
}
}