火星文 技术研习社

Noname Cat, Keep Thinking
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Attribute (Anotation 标注) 示例

Posted on 2006-09-14 10:07  剑廿三  阅读(477)  评论(0)    收藏  举报
C# 示例代码:

using System;
using System.Reflection;
using NUnit.Framework;

namespace AttrTest
{
    
// An enumeration of animals. Start at 1 (0 = uninitialized). 
    public enum Animal 
    { 
        
// Pets. 
        Dog = 1
        Cat, 
        Bird, 
    } 

    
// A custom attribute to allow a target to have a pet. 
    public class AnimalTypeAttribute : Attribute 
    { 
        
// The constructor is called when the attribute is set. 
        public AnimalTypeAttribute(Animal pet) 
        { 
            thePet 
= pet; 
        } 

        
// Keep a variable internally  
        protected Animal thePet; 

        
// .. and show a copy to the outside world. 
        public Animal Pet 
        { 
            
get { return thePet; } 
            
set { thePet = Pet; } 
        } 
    } 

    
// A test class where each method has its own pet. 
    class AnimalTypeTestClass 
    { 
        [AnimalType(Animal.Dog)] 
        
public void DogMethod() {} 

        [AnimalType(Animal.Cat)] 
        
public void CatMethod() {} 

        [AnimalType(Animal.Bird)] 
        
public void BirdMethod() {} 
    } 

    [TestFixture]
    
class DemoClass 
    { 
        [Test]
        
public void AttrTest()
        {
            AnimalTypeTestClass testClass 
= new AnimalTypeTestClass(); 
            Type type 
= testClass.GetType(); 
            
// Iterate through all the methods of the class. 
            foreach(MethodInfo mInfo in type.GetMethods()) 
            { 
                
// Iterate through all the Attributes for each method. 
                foreach (Attribute attr in 
                    Attribute.GetCustomAttributes(mInfo)) 
                { 
                    
// Check for the AnimalType attribute. 
                    if (attr.GetType() == typeof(AnimalTypeAttribute)) 
                        Console.WriteLine( 
                            
"Method {0} has a pet {1} attribute."
                            mInfo.Name, ((AnimalTypeAttribute)attr).Pet); 
                } 

            } 
        }

        
static void Main(string[] args) 
        { 
            AnimalTypeTestClass testClass 
= new AnimalTypeTestClass(); 
            Type type 
= testClass.GetType(); 
            
// Iterate through all the methods of the class. 
            foreach(MethodInfo mInfo in type.GetMethods()) 
            { 
                
// Iterate through all the Attributes for each method. 
                foreach (Attribute attr in 
                    Attribute.GetCustomAttributes(mInfo)) 
                { 
                    
// Check for the AnimalType attribute. 
                    if (attr.GetType() == typeof(AnimalTypeAttribute)) 
                        Console.WriteLine( 
                            
"Method {0} has a pet {1} attribute."
                            mInfo.Name, ((AnimalTypeAttribute)attr).Pet); 
                } 

            } 
        } 
    } 

}