C#反射小例

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Reflection ;
  6. using Com.Zhao.Des.VectorClass ;
  7. using Com.Zhao.Attr.WathsNewAttributes ;
  8. namespace Com.Zhao.App.LookUpWhatsNew
  9. {
  10.     class WhatsNewChecker
  11.     {
  12.         /// <summary>
  13.         /// 要输出的文本
  14.         /// </summary>
  15.         static StringBuilder outputText = new StringBuilder(1024) ;
  16.         /// <summary>
  17.         /// 查询修改日志的起始日期
  18.         /// </summary>
  19.         static DateTime backDateTo = new DateTime( 2008 , 2 , 15 ) ;
  20.         static void Main( string[] args )
  21.         {
  22.             Assembly theAssembly = Assembly.Load("VectorClass") ;
  23.             //验证程序集是不是加了我们的特性标记
  24.             Attribute supportsAttr = Attribute.GetCustomAttribute( theAssembly , typeof(SupportWhatsNewAttribute) ) ;
  25.             string name = theAssembly.FullName ;
  26.             //程序集全名
  27.             Console.WriteLine( "程序集全名:" + name ) ;
  28.             if( supportsAttr == null )
  29.             {
  30.                 Console.WriteLine( "对不起,访问的程序集并没有例用标记标识" ) ;
  31.             }
  32.             else
  33.             {
  34.                 Type[] types = theAssembly.GetTypes() ;
  35.                 foreach( Type t in types )
  36.                 {
  37.                     DispalyTypeInfo( t ) ;
  38.                 }
  39.                 Console.WriteLine( outputText ) ;
  40.             }
  41.             Console.ReadLine() ;
  42.         }
  43.         static void DispalyTypeInfo(  Type type )
  44.         {
  45.             //如果不是类,我们不考虑,比如说结构
  46.             if( ! type.IsClass )
  47.             {
  48.                 return ;
  49.             }
  50.             AddToMessages( "/n 类名: " + type.Name ) ;
  51.             //得到类的所有特性
  52.             Attribute[] atts = Attribute.GetCustomAttributes( type ) ;
  53.             
  54.             if( atts.Length == 0 )
  55.             {
  56.                 AddToMessages( "对不起,没有任何特性!" ) ;
  57.             }
  58.             else
  59.             {
  60.                 foreach( Attribute attrib in atts )
  61.                 {
  62.                     WriteAttributeInfo( attrib ) ;
  63.                 }
  64.             }
  65.             MethodInfo[] methods = type.GetMethods() ;
  66.             AddToMessages( "------------类中修改过的方法-----------" ) ;
  67.             
  68.             foreach( MethodInfo info in methods )
  69.             {
  70.                 object[] attr2 = info.GetCustomAttributes( typeof(LastModifiedAttribute) , false ) ;
  71.             
  72.                 if( attr2 != null )
  73.                 {
  74.                     AddToMessages( info.ReturnType + " " + info.Name + "()" ) ;
  75.                     foreach( Attribute a in attr2 )
  76.                     {
  77.                         WriteAttributeInfo( a ) ;
  78.                     }
  79.                 }
  80.             }
  81.         }
  82.         /// <summary>
  83.         /// 输出特性信息
  84.         /// </summary>
  85.         /// <param name="attrib">要输出的特性</param>
  86.         static void WriteAttributeInfo( Attribute attrib )
  87.         {
  88.             LastModifiedAttribute lastattr = attrib as LastModifiedAttribute ;
  89.             if( lastattr == null )
  90.             {
  91.                 return ;
  92.             }
  93.             else
  94.             {
  95.                 DateTime date = lastattr.DeteModified ;
  96.                 if( date < backDateTo )
  97.                 {
  98.                     //如果特性的修改日期早于我们的查询起始日,不考虑输出
  99.                     return ;
  100.                 }
  101.                 else
  102.                 {
  103.                     AddToMessages( "修改日期: " + date.ToString() + ":" ) ;
  104.                     AddToMessages( "   " + lastattr.Changes ) ;
  105.                     if( lastattr.Issues != null )
  106.                     {
  107.                         AddToMessages( "   备注:  " + lastattr.Issues ) ;
  108.                     }
  109.                 }
  110.             }
  111.         }
  112.         static void AddToMessages( string message )
  113.         {
  114.             outputText.Append( "/n" + message ) ;
  115.         }
  116.     }
  117. }
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Com.Zhao.Attr.WathsNewAttributes ;
  6. [assembly: SupportWhatsNew]
  7. namespace Com.Zhao.Des.VectorClass
  8. {
  9.     [LastModified("14 Feb 2008""这次修改我们改了类的结构,增加了1号功能", Issues = "重要备注。。。下次修改前请联系我")]
  10.     [LastModified("15 Feb 2008""这次修改我们改了类的结构,增加了2号功能", Issues = "重要备注。。。下次修改前请联系我")]
  11.     [LastModified("16 Feb 2008""这次修改我们改了类的结构,增加了3号功能", Issues = "重要备注。。。下次修改前请联系我")]
  12.     [LastModified("17 Feb 2008""这次修改我们改了类的结构,增加了4号功能", Issues = "重要备注。。。下次修改前请联系我")]
  13.     public class Vector
  14.     {
  15.         public double x , y , z ;
  16.         public Vector( double x , double y , double z )
  17.         {
  18.             this.x = x ;
  19.             this.y = y ;
  20.             this.z = z ;
  21.         }
  22.         [LastModified("14 Feb 2008" ,"这次修改我们改了字符串的显示,加了1号功能." , Issues = "重要备注。。。下次修改前请联系我" ) ]
  23.         [LastModified("15 Feb 2008""这次修改我们改了字符串的显示,加了2号功能.", Issues = "重要备注。。。下次修改前请联系我")]
  24.         [LastModified("16 Feb 2008""这次修改我们改了字符串的显示,加了3号功能.", Issues = "重要备注。。。下次修改前请联系我")]
  25.         public override string ToString()
  26.         {
  27.             return base.ToString();
  28.         }
  29.     }
  30. }
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Com.Zhao.Attr.WathsNewAttributes
  6. {
  7.     /// <summary>
  8.     /// 本特性只能用于类或者方法,可以多次用到一个元素上,但是不可以继承特性
  9.     /// </summary>
  10.     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method , AllowMultiple = true , Inherited = false )]
  11.     public class LastModifiedAttribute :Attribute
  12.     {
  13.         /// <summary>
  14.         /// 最后一次修改时间
  15.         /// </summary>
  16.         private DateTime deteModified;
  17.         public DateTime DeteModified
  18.         {
  19.             get { return deteModified; }
  20.         }
  21.         /// <summary>
  22.         /// 修改了什么内容,标记出来
  23.         /// </summary>
  24.         private string changes;
  25.         public string Changes
  26.         {
  27.             get { return changes; }
  28.         }
  29.         /// <summary>
  30.         /// 如果有什么重要备注,请指出
  31.         /// </summary>
  32.         private string issues;
  33.         public string Issues
  34.         {
  35.             get { return issues; }
  36.             set { issues = value; }
  37.         }
  38.         public LastModifiedAttribute( string date , string changes )
  39.         {
  40.             this.deteModified = DateTime.Parse( date ) ;
  41.             this.changes = changes ;
  42.         }
  43.     }
  44.     /// <summary>
  45.     /// 只要以用来标记在程序集中
  46.     /// </summary>
  47.     [AttributeUsage(AttributeTargets.Assembly) ]
  48.     public class SupportWhatsNewAttribute :Attribute
  49.     {
  50.     }
  51. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值