C#高级编程之“代码属性”

本文主要通过一个实际的例子来解释“代码属性”的概念

代码属性是与代码一起在程序的运行过程中为代码服务的,理解“代码属性”概念的关键在于认识到“代码属性”也是一种类,它是一种特殊的类,一种从System.Attribute继承出来的类。

下面的代码主要实现的功能是:在代码运行异常的时候,根据该段代码的“代码属性”给出这段代码的作者以及这名作者的电子信箱。

下面给出一个自定义的“代码属性”的类:

 

using  System;

namespace  CodeProperty
{
    
///   <summary>
    
///  CustomAttribute 的摘要说明。
    
///   </summary>
    [AttributeUsage(AttributeTargets.All)]
    
public   class  CustomAttribute:System.Attribute
    {
        
public  CustomAttribute( string  name, string  email)
        {
            
this .CodeAuthorName = name;
            
this .CodeAuthorEmail = email;
        }
        
private   string  CodeAuthorName = string .Empty;
        
private   string  CodeAuthorEmail = string .Empty;
        
public   string  AuthorName
        {
            
get
            {
                
return   this .CodeAuthorName;
            }
            
set
            {
                
this .CodeAuthorName = value;
            }
        }
        
public   string  AuthorEmail
        {
            
get
            {
                
return   this .CodeAuthorEmail;
            }
            
set
            {
                
this .CodeAuthorEmail = value;
            }
        }

    }
}

 

为了使用这个自定义的“代码属性”的类,我们写了一个有问题的代码:

 

using  System;
using  System.Reflection;

namespace  CodeProperty
{
    
///   <summary>
    
///  ClassWithError 的摘要说明。
    
///   </summary>
     public   class  ClassWithError
    {
        
public  ClassWithError()
        {
            
//
            
//  TODO: 在此处添加构造函数逻辑
            
//
            
        }
        [Custom(
" testname " " testname@21cn.com " )]
        
public   void  DoSomething()
        {
            
try
            {
                
int  x = 20 ;
                
int  y = 4 ;
                
int  z = y - 4 ;
                
int  result = x / z;
            }
            
catch
            {
                Console.WriteLine(
" 代码有一些错误发生 " );
                Console.WriteLine(
" int x=20; " );
                Console.WriteLine(
" int y=4; " );
                Console.WriteLine(
" int z=y-4; " );
                Console.WriteLine(
" int result=x/z; " );
                CustomAttribute ca
= CustomAttributeTool.GetAttributeData(MethodBase.GetCurrentMethod());
                Console.WriteLine(
" 本段代码由{0}编写,他/她的电子信箱是{1} " ,ca.AuthorName,ca.AuthorEmail);                
            }
        }

    }
}

 

注意在里面有一个CustomAttributeTool,这个类的目的是得到CustomAttribute类的作者属性与作者的电子信箱

代码如下:

 

using  System;
using  System.Reflection;
namespace  CodeProperty
{
    
///   <summary>
    
///  CustomAttributeTool 的摘要说明。
    
///   </summary>
     public   class  CustomAttributeTool
    {
        
public  CustomAttributeTool()
        {
            
//
            
//  TODO: 在此处添加构造函数逻辑
            
//
        }
        
public   static  CustomAttribute GetAttributeData(MethodBase method)
        {
            
object [] attributes = method.GetCustomAttributes( typeof (CustomAttribute), true );
            
return  (CustomAttribute)attributes[ 0 ];
        }
    }
}

 

好了,最后我们来写一个带main的类来调用它们就可以了

带main的类的代码如下:

 

using  System;

namespace  CodeProperty
{
    
///   <summary>
    
///  Class1 的摘要说明。
    
///   </summary>
     class  Class1
    {
        
///   <summary>
        
///  应用程序的主入口点。
        
///   </summary>
        [STAThread]
        
static   void  Main( string [] args)
        {
            
//
            
//  TODO: 在此处添加代码以启动应用程序
            
//
            ClassWithError cwe = new  ClassWithError();
            cwe.DoSomething();
            Console.ReadLine();
        }
    }
}

 

看看运行的结果



 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值