本文整理自网络。
首先你得理解什么是Attribute(这里翻译为特性,属性应该对应于(Property),是c#另一个内容了),特性允许我们添加类似关键字(比如public)的批注来为元素(可以是class,method,property,parameter,event等),在运行时可以通过反射获得这些信息,从而影响程序的行为。
对于Attribute,我们可以使用AttributesUage施加在这些特性(attribute)之上。我们姑且可以称AttributeUsage为元特性(专门施加在特性之上的特性)
[AttributeUsage( validon, AllowMultiple = allowmultiple, Inherited = inherited)]
例如:[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]//注意后面两个参数必须以具名参数的方式给出,不能直接写true,false。
下面分别讲解这三个参数:
一、validon
定义特性目标

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

当使用Attribute特性时,我们有时需要指定这些特性施加的目标类型AttributeTargets。我们给定AttributeTargets.Class,因此特性只能被附加到类类型上。若未指定AttributeUsage特性,缺省值是AttributeTargets.All。特性AttributeTargets用来限制特性使用范围。

2

3

4

5

6

7

8

9

10

11

12

13

14

可以使用或(|)操作符组合特性目标枚举中列出的项。
单一用途和多用途特性
可以使用AttributeUsage定义特性的单一用途或多用途,即确定在某个类型上使用某一特性的次数。在缺省情况下,所有特性都是单用途的。在AttributeUsage特性中,指定AllowMultiple为true,则允许特性多次附加到指定的类型上。例如:

2

3

4

5

6

7

8

9 [Something("abc")]
10

11

12

13

14

指定继承特性规则
在AttributeUsageAttribute特性的最后部分是继承标志,指示父类的某个特性是否能被子类继承。缺省值是false。当该参数为FALSE时,一切都很容易理解。然而,若继承标志被设置为true,它的含义将依赖于AllowMultiple标志的值。(原文这里讲的并不清楚)
若继承标志被设置为true,AllowMultiple标志是false,则子类该类型特性将覆盖父类该类型特性。
若继承标志被设置为true,AllowMultiple标志是true,则父类该特性的成员与子类同类型特性的成员同时存在于子类。
范例:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

44

46

47

49

50

51

54

55

56

57

58

59

60

若AllowMultiple设置为false,结果是:
Another
若AllowMultiple设置为true,结果是:
MyClass
Another
原文地址:
http://www.cnblogs.com/stzyw/archive/2005/10/07/249693.html
参考文献:
《C# 4.0权威指南》
http://bbs.youkuaiyun.com/topics/360111279