AttributeUsage属性
来源:互联网 发布:thrift java 例子 编辑:程序博客网 时间:2024/05/22 13:30
除了定制attributes之外,可以使用Attributes属性定义如何使用这些属性。例如:
当使用Attribute属性时,能指定AttributeTargets.all(属性目标),因此属性能被附加到在枚举AttributeTargets列出的任意类型上。若未指定AttributeUsage属性,缺省值是AttributeTargets.All。属性AttributeTargets用来限制属性使用范围。
可以使用或(|)操作符组合属性目标枚举中列出的项。
[AttributeUsage(
validon,
AllowMultiple = allowmultiple,
Inherited = inherited
)]
强烈推荐使用AttributeUsage属性将属性文档化,因此属性的用户能直接使用已命名的属性,而不用在源代码中查找公用的读/写字段和属性。
定义属性目标
1public enum AttributeTargets
2{
3 Assembly = 0x0001,
4 Module = 0x0002,
5 Class = 0x0004,
6 Struct = 0x0008,
7 Enum = 0x0010,
8 Constructor = 0x0020,
9 Method = 0x0040,
10 Property = 0x0080,
11 Field = 0x0100,
12 Event = 0x0200,
13 Interface = 0x0400,
14 Parameter = 0x0800,
15 Delegate = 0x1000,
16 All = Assembly │ Module │ Class │ Struct │ Enum │ Constructor │
17 Method │ Property │ Field │ Event │ Interface │ Parameter │
18 Delegate,
19
20 ClassMembers = Class │ Struct │ Enum │ Constructor │ Method │
21 Property │ Field │ Event │ Delegate │ Interface,
22}
23
2{
3 Assembly = 0x0001,
4 Module = 0x0002,
5 Class = 0x0004,
6 Struct = 0x0008,
7 Enum = 0x0010,
8 Constructor = 0x0020,
9 Method = 0x0040,
10 Property = 0x0080,
11 Field = 0x0100,
12 Event = 0x0200,
13 Interface = 0x0400,
14 Parameter = 0x0800,
15 Delegate = 0x1000,
16 All = Assembly │ Module │ Class │ Struct │ Enum │ Constructor │
17 Method │ Property │ Field │ Event │ Interface │ Parameter │
18 Delegate,
19
20 ClassMembers = Class │ Struct │ Enum │ Constructor │ Method │
21 Property │ Field │ Event │ Delegate │ Interface,
22}
23
当使用Attribute属性时,能指定AttributeTargets.all(属性目标),因此属性能被附加到在枚举AttributeTargets列出的任意类型上。若未指定AttributeUsage属性,缺省值是AttributeTargets.All。属性AttributeTargets用来限制属性使用范围。
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
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{
4 public SomethingAttribute(String str)
5 {
6 }
7}
8
9[Something("abc")]
10[Something("def")]
11class MyClass
12{
13}
14
2public class SomethingAttribute : Attribute
3{
4 public SomethingAttribute(String str)
5 {
6 }
7}
8
9[Something("abc")]
10[Something("def")]
11class MyClass
12{
13}
14
指定继承属性规则
在AttributeUsageAttribute属性的最后部分是继承标志,用于指定属性是否能被继承。缺省值是false。然而,若继承标志被设置为true,它的含义将依赖于AllowMultiple标志的值。若继承标志被设置为true,并且AllowMultiple标志是false,则该属性将忽略继承属性。若继承标志和AllowMultiple标志都被设置为true,则该属性的成员将与派生属性的成员合并。范例:
1using System;
2using System.Reflection;
3
4namespace AttribInheritance
5{
6 [AttributeUsage(
7 AttributeTargets.All,
8 AllowMultiple = true,
9 //AllowMultiple = false,
10 Inherited = true
11 )]
12 public class SomethingAttribute : Attribute
13 {
14 private string name;
15 public string Name
16 {
17 get { return name; }
18 set { name = value; }
19 }
20
21 public SomethingAttribute(string str)
22 {
23 this.name = str;
24 }
25 }
26
27 [Something("abc")]
28 class MyClass
29 {
30 }
31
32 [Something("def")]
33 class Another : MyClass
34 {
35 }
36
37 class Test
38 {
39 [STAThread]
40 static void Main(string[] args)
41 {
42 Type type =
43 Type.GetType("AttribInheritance.Another");
44 foreach (Attribute attr in type.GetCustomAttributes(true))
45 //type.GetCustomAttributes(false))
46 {
47 SomethingAttribute sa =
48 attr as SomethingAttribute;
49 if (null != sa)
50 {
51 Console.WriteLine(
52 "Custom Attribute: {0}",
53 sa.Name);
54 }
55 }
56
57 }
58 }
59}
60
2using System.Reflection;
3
4namespace AttribInheritance
5{
6 [AttributeUsage(
7 AttributeTargets.All,
8 AllowMultiple = true,
9 //AllowMultiple = false,
10 Inherited = true
11 )]
12 public class SomethingAttribute : Attribute
13 {
14 private string name;
15 public string Name
16 {
17 get { return name; }
18 set { name = value; }
19 }
20
21 public SomethingAttribute(string str)
22 {
23 this.name = str;
24 }
25 }
26
27 [Something("abc")]
28 class MyClass
29 {
30 }
31
32 [Something("def")]
33 class Another : MyClass
34 {
35 }
36
37 class Test
38 {
39 [STAThread]
40 static void Main(string[] args)
41 {
42 Type type =
43 Type.GetType("AttribInheritance.Another");
44 foreach (Attribute attr in type.GetCustomAttributes(true))
45 //type.GetCustomAttributes(false))
46 {
47 SomethingAttribute sa =
48 attr as SomethingAttribute;
49 if (null != sa)
50 {
51 Console.WriteLine(
52 "Custom Attribute: {0}",
53 sa.Name);
54 }
55 }
56
57 }
58 }
59}
60
若AllowMultiple设置为false,结果是:
Custom Attribute: def
若AllowMultiple设置为true,结果是:
Custom Attribute: def
Custom Attribute: abc
0 0
- AttributeUsage属性
- AttributeUsage属性
- AttributeUsage属性
- AttributeUsage属性
- AttributeUsage
- AttributeUsage
- AttributeUsage
- 介绍属性与自定义属性、AttributeUsage属性
- C# AttributeUsage
- AttributeUsage 2
- C# AttributeUsage
- 特性入门AttributeUsage
- AttributeUsage(转载)
- C# AttributeUsage的使用浅析
- C# AttributeUsage的使用浅析
- C# AttributeUsage的使用浅析
- C# AttributeUsage的使用浅析(转载)
- C# AttributeUsage~不是很懂。。留着看
- Android中解析XML
- iOS——证书那些事
- HTML5 UTF-8 中文乱码
- StarUml 使用介绍
- <c:foreach>用法
- AttributeUsage属性
- 微信营销很简单,做好这些你就是大师
- 理解HTTP幂等性
- OSI和TCP/IP网络模型
- Windows控制面板编程
- struts2 validation.xml 验证
- java实现JsonObject和Json字符串的转化
- mybatis的BLOB存储与读取
- 一枚PHP最新版本过狗Shell