C#高级编程    第三章 : 特征   /**/ ←→↑↓

//特征: 它提供了一种为类型实体(如类、结构、接口、 方法和属性等)描述附加信息的方法,一旦代码的实体被附加了信息 就可以在运行的时候获得这些信息


//定义:
{
                                                定义的特征类:是否可以叠加描述一个对象
     系统预定义的特征类       获取一个枚举值用来描↓述可附着的目标
  ↓             ↓                 ↓
 [AttributUsage(AttributeTargets.All,AllowMultiple = true, Inherited = false)]
用户自定义 →      public class 特征类名: Attribute ←继承            ↑
                   {}                                               如果描述的是一个父类,它的子类是否能够继承特征

      /*用时*/
                向构造函数传值
                   ↓
       [特征类名("Numbers",Comment = "....")]
                              ↑
                             属性赋值
          //特征的实例化不用new而用[]属性也在()其中
}


//使用: 1、利用Typeof运算符获取userInfo类型的System.Type对象
  Type t = typeof(userInfo)
       ↑
                [特征附着类]

  2、使用自定义属性类的GetCustomAttrobuts() 方法

         3、检索应用于类型的成员的自定义的属性的数组

         4、GetCustomAttributs()方法的返回值类型:System.Attributes[] 数组 也就是说它会返回特征中所存放的所有信息,并存放到自定义属性数组中

  /*例子*/
  Attribute[] users = Attribute.GetCustomAttributes(t);
                                                           ↑
                                                          Type t = typeof(...) 出来的,获得类的特征
         foreach(Attribute aause in users)
 {
  myUserAttribute aa = (myUserAttribute)aause;
                    ↑
                   特征类

  Console.WriteLine("用户姓名:{0},来自{1}", aa.userName,.....);
                                                                 ↑
                                                               特征类的属性
 }

 


        /*特殊用法*/
 
 Obsolete : 预定义的特征类,标记不用的程序元素

 /*例子*/
 [obsoleteAttribute("当前方法已过时...",true)]
  过时的方法       ↑             ↑
                               会在错误或警告   ↑
                               中显示           ↑
                                               在Main下调用此方法时 { true: 生成一个错误
                                                                      false :生成一个警告但程序还可正常运行
                                                                    }

 


//宏       宏→   # defone NoBug→→→→→↓一样

    using System.Diagnostics↓   /*Diagnostics : 诊断的*/

                  [ConditionalAttribute("NoBug")]  /*Conditional : 有条件的*/
                            相对的方法

                    /*在每个方法上面都加上不同的特征(在所有字段的上面把相对的宏定义出来)就会在编译时调用相对应的宏上的方法(即使在写代码时调用所有的方法)*/

posted on 2010-03-04 12:53  秦威龙  阅读(283)  评论(0编辑  收藏  举报