進哥的布拉格

Chin Gooole's Blog

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

拮取自(This article is modified from) https://secure.codeproject.com/KB/cs/attributes.aspx?display=Print

using System;
using System.Reflection;
using System.Diagnostics;

class A
{
    [AttributeUsage(AttributeTargets.All, AllowMultiple 
= true, Inherited = false)]
    
    
//attaching Help attribute to entire assembly
    [assembly: Help("This Assembly demonstrates custom attributes creation and their run-time query.")]
    
//our custom attribute class
    public class HelpAttribute : Attribute
    {
        
public HelpAttribute(String Description_in)
        {
            
this.description = Description_in;
        }
        
protected String description;
        
public String Description
        {
            
get
            {
                
return this.description;
            }
        }
    }
    
//attaching Help attribute to our AnyClass
    [Help("This is a do-nothing Class.")]
    [Help(
"This is a do-nothing Class2")]
    
public class AnyClass
    {
        
//attaching Help attribute to our AnyMethod

        [Help(
"This is a do-nothing Method.")]
        
public void AnyMethod() {}
        
//attaching Help attribute to our AnyInt Field
        [Help("This is any Integer.")]
        
public int AnyInt;
    }

    
class QueryApp
    {
        
public static void Main()
        {

            Type type 
= typeof(AnyClass);
            HelpAttribute HelpAttr;

            
//Querying Class Attributes
            foreach (Attribute attr in type.GetCustomAttributes(true))
            {
                HelpAttr 
= attr as HelpAttribute;
                
if (null != HelpAttr)
                    Console.WriteLine(
"Description of AnyClass:\n{0}", HelpAttr.Description);
            }

            
//Querying Class-Method Attributes  
            foreach (MethodInfo method in type.GetMethods())
            {
                
foreach (Attribute attr in method.GetCustomAttributes(true))
                {
                    HelpAttr 
= attr as HelpAttribute;
                    
if (null != HelpAttr)
                        Console.WriteLine(
"Description of {0}:\n{1}",method.Name, HelpAttr.Description);
                }
            }
            
            
//Querying Class-Field (only public) Attributes
            foreach (FieldInfo field in type.GetFields())
            {
                
foreach (Attribute attr in field.GetCustomAttributes(true))
                {
                    HelpAttr 
= attr as HelpAttribute;
                    
if (null != HelpAttr)
                        Console.WriteLine(
"Description of {0}:\n{1}", field.Name, HelpAttr.Description);
                }
            }
        }
    }
}

 

印出結果:

Description of AnyClass:
This is a do-nothing Class2
Description of AnyClass:
This is a do-nothing Class.
Description of AnyMethod:
This is a do-nothing Method.
Description of AnyInt:
This is any Integer.

posted on 2008-10-28 17:10  進哥  阅读(139)  评论(0编辑  收藏  举报