特性

1、特性参数
  1、定位参数
  2、命名参数
    命名参数与特性对象的公有字段和属性对应。如果命名参数使用静态的或只读的字段和属性将会产生编译错误

2、特性目标(应用于制定特性要应用的程序元素,它是可选的,不过有时候使用特性目标可以让特性的意图更加明显)
  特性目标分类:
  目标名称        可以应用到
  all           任何元素
  assembly        程序集
  class           类
  constructor      构造函数
  delegate        委托
  enum         枚举
  event         事件
  field          字段
  interface        接口
  method        方法
  module        模块
  param          参数
  property        属性
  return          返回值
  struct          结构

3、创建自定义特性
  1、如果字段和属性要作为特性的命名参数,则特性类的字段和属性必须是公开的,并且属性必须都包含get和set访问器
  2、C#的特性有一个通用的命名约定:给类名添加Attribute后缀,使用特性时,可以省略该后缀

  
    
1 using System;
2
3
4   /// <summary>
5 /// Custom Attribute Example
6 /// </summary>
7
8 [
9 Tracker( " CR-0001 " ,
10 " some fix " ,
11 EngineerId = " Joe " ,
12 ChangeDate = " 10/04/2011 " )
13 ]
14
15 public class SomeProgram
16 {
17 static void Main( string [] args)
18 {
19 SomeProgram sp = new SomeProgram();
20 }
21 }
22
23
24 [
25 AttributeUsage(AttributeTargets.All,
26 AllowMultiple = true ,
27 Inherited = true )
28 ]
29
30 class TrackerAttribute : Attribute
31 {
32 public string ProblemId;
33 public string EngineerId;
34
35 private string fixDescription;
36 private DateTime changeDate;
37
38 public string FixDescription
39 {
40 get
41 {
42 return fixDescription;
43 }
44 set
45 {
46 fixDescription = value;
47 }
48 }
49
50 public string ChangeDate
51 {
52 get
53 {
54 return changeDate.ToString( " d " );
55 }
56 set
57 {
58 changeDate = DateTime.Parse(value);
59 }
60 }
61
62 public TrackerAttribute()
63 {
64 this .ProblemId = " UNASSIGNED " ;
65 this .EngineerId = " Unidefined Engineer " ;
66 this .FixDescription = " No description provided " ;
67 this .ChangeDate = " 01/01/2009 " ;
68 }
69
70 public TrackerAttribute( string problemId, string fixDescription)
71 {
72 this .ProblemId = problemId;
73 this .EngineerId = " Unidefined Engineer " ;
74 this .FixDescription = fixDescription;
75 this .ChangeDate = " 01/01/2009 " ;
76 }
77
78 }

你可能感兴趣的:(特性)