C#自定义Attribute举例!

using  System;

namespace  ConsoleApplication1
{
 
// 定义枚举
 [System.Flags()]
 
public   enum  AccountsE
 {
  Saveings
= 0x0001 ,
  Checking
= 0x0002 ,
  Brokerage
= 0x0004
 }
 
// 自定义特性
 [System.AttributeUsage(AttributeTargets.Class)]
 
public   class  AccountsAttribute:Attribute
 {
  
public  AccountsE accounts;
  
public  AccountsAttribute(AccountsE accounts)
  {
   
this .accounts = accounts;
  }
 }
 [ConsoleApplication1.Accounts(AccountsE.Saveings)]
 
class  ChildAccount{}
 [ConsoleApplication1.Accounts(AccountsE.Saveings
| AccountsE.Checking | AccountsE.Brokerage)]
 
class  AdultAccount{}

 
class  Class1
 {
  [STAThread]
  
static   void  Main( string [] args)
  {
   CanWriteCheck(
new  ChildAccount());
   CanWriteCheck(
new  AdultAccount());
   CanWriteCheck(
new  Class1());
  }
  
public   static   void  CanWriteCheck( object  obj)
  {
   
// 构造AccountsAttribute实例
   AccountsAttribute checking = new  AccountsAttribute(AccountsE.Checking);
   
// 通过Attribute.GetCustomAttribute的静态方法来得到指定的特性的实例,然后就可以读取实例的属性了,用此来判断
   
// 依据
   Attribute validAccounts = Attribute.GetCustomAttribute(obj.GetType(), typeof (AccountsAttribute), false );
   
if  (validAccounts != null )
   {
    AccountsAttribute tmpAccounts
= validAccounts  as  AccountsAttribute;
    
if ((checking.accounts  &  tmpAccounts.accounts) == checking.accounts)
    {
     Console.WriteLine(
" {0} types can write checks. " ,obj.GetType());
    }
    
else
    {
     Console.WriteLine(
" {0} type can not write checks. " ,obj.GetType());
    }
   }
   
else
   {
    Console.WriteLine(
" {0} type can not write checks. " ,obj.GetType());
   }

  }
 }
}

转载于:https://www.cnblogs.com/fxwdl/archive/2006/08/08/471288.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值