AttributeUsage属性

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AttributeUsage属性

除了定制attributes之外,可以使用Attributes属性定义如何使用这些属性。例如:[AttributeUsage( validon,

AllowMultiple = allowmultiple,

Inherited = inherited

)]

强烈推荐使用AttributeUsage属性将属性文档化,因此属性的用户能直接使用已命名的属性,而不用在源代码中查找公用的读/写字段和属性。

定义属性目标

1public enum AttributeTargets

2{

3Assembly = 0x0001,

4Module = 0x0002,

5Class = 0x0004,

6Struct = 0x0008,

7Enum = 0x0010,

8Constructor = 0x0020,

9Method = 0x0040,

10Property = 0x0080,

11Field = 0x0100,

12Event = 0x0200,

13Interface = 0x0400,

14Parameter = 0x0800,

15Delegate = 0x1000,

16All = Assembly │ Module │ Class │ Struct │ Enum │ Constructor │

17Method │ Property │ Field │ Event │ Interface │ Parameter │

18Delegate,

19

20ClassMembers = Class │ Struct │ Enum │ Constructor │ Method │

21Property │ Field │ Event │ Delegate │ Interface,

22}

23

当使用Attribute属性时,能指定AttributeTargets.all(属性目标),因此属性能被附加到在枚举Attribute Targets列出的任意类型上。若未指定AttributeUsage属性,缺省值是AttributeTargets.All。属性Attribut eTargets用来限制属性使用范围。

1[AttributeUsage(AttributeTargets.Class)]

2public class RemoteObjectAttribute : Attribute

3{

4…

5}

6

7[AttributeUsage(AttributeTargets.Method)]

8public class TransactionableAttribute : Attribute

9{

10

11

12

13}

14

可以使用或(|)操作符组合属性目标枚举中列出的项。单一用途和多用途属性

可以使用AttributeUsage定义属性的单一用途或多用途。即确定在单个字段上使用单一属性的次数。在缺省情况下,所有属性都是单用途的。在AttributeUsage属性中,指定AllowMultiple 为true,则允许属性多次附加到指定的类型上。例如:

1[AttributeUsage(AttributeTargets.All, AllowMultiple=true)]

2public class SomethingAttribute : Attribute

3{

4public SomethingAttribute(String str)

5{

6}

7}

8

9[Something("abc")]

10[Something("def")]

11class MyClass

12{

13}

14

指定继承属性规则

在AttributeUsageAttribute属性的最后部分是继承标志,用于指定属性是否能被继承。缺省值是false。然而,若继承标志被设置为true,它的含义将依赖于AllowMultiple标志的值。若继承标志被设置为true,并且AllowMultiple标志是flag,则改属性将忽略继承属性。若继承标志和AllowMultiple标志都被设置为true,则改属性的成员将与派生属性的成员合并。范例:

1using System;

2using System.Reflection;

3

4namespace AttribInheritance

5{

6[AttributeUsage(

7AttributeTargets.All,

8AllowMultiple = true,

9//AllowMultiple = false,

10Inherited = true

11)]

12public class SomethingAttribute : Attribute 13{

14private string name;

15public string Name

16{

17get{ return name; }

18set{ name = value; }

19}

20

21public SomethingAttribute(string str)

22{

= str;

24}

25}

26

27[Something("abc")]

28class MyClass

29{

30}

31

32[Something("def")]

33class Another : MyClass

34{

35}

36

37class Test

38{

相关文档
最新文档