Attribute:特性的一个例子

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
namespace ConsoleApplication32
{
    //限定特性类的应用范围
    [AttributeUsage(AttributeTargets.Class|AttributeTargets.Field,AllowMultiple=true,Inherited=false)]
    //定制MsgAttribute特性类,继续于Attribute
    public class ClassMsgAttribute : Attribute
    {
        //定义_msg字段和Msg属性
        string _msg;
        public string Msg
        {
            get { return _msg; }
            set { _msg = value; }
        }
        public ClassMsgAttribute() { }
        //重新构造函数接收一个参数,赋值给_msg
        public ClassMsgAttribute(string s) { _msg = s; }
    }
    //特性也是一个类,必须继承于System.Attribute类,命名规范为“类名”+Attribute。不管是直接还是间接继承,都会成为一个特性类,特性类的声明定义了一种可以放置在声明之上新的特性。
    public class myclasAttribute : Attribute
    {
        string _msg;
        public string Msg
        {
            get { return _msg; }
            set { _msg = value; }
        }
        public myclasAttribute() { }
        public myclasAttribute(string s) { _msg = s; }

    }   
    //在Person上标记ClassMsg特性
    [ClassMsg(Msg="这是关于人的姓名信息的类")]
    public class Person
    {
        //在_name字段上应用ClassMsg特性 
        [ClassMsg("这是存储姓名的字段")]
        string _name;
        //以下特性无法应用,因为MsgAttribute定义的特性只能用于类和字段  
        //[ClassMsg("这是读写姓名字段的属性")]  
        public string name 
        {
            get { return _name; }
            set { _name = value; }
        }

    }
    
    class Program
    {
        static void Main(string[] args)
        {
            //获取Person类的Type对象tp  
            Type tp = Type.GetType("ConsoleApplication32.Person");//这里要引用命名空间
            Console.WriteLine(tp.GetType());
            //获取tp对象的特性数组,并将数组赋值给MyAtts  
            object[] MyAtts = tp.GetCustomAttributes(false);//GetCustomAttributes用于获取程序集的特性,也就是这个程序集合中包含了多少个特性
            //遍历并输出MyAtts数组子项的Msg属性  
            foreach (ClassMsgAttribute m in MyAtts)
            {
                Console.WriteLine("Person类的特型:{0}", m.Msg);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值