C#特征

C#特性

<1>

 

C#特性学习笔记


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication1
{
    //Attribute 类
    //TypeId属性: 当在派生类中实现时,获取该 Attribute 的唯一标识符。


    //AttributeUsageAttribute 类   (AttributeUsageAttribute 类是继承自 Attribute 的)
    //AttributeUsageAttribute.Inherited 属性:获取或设置一个布尔值,该值指示指示的属性能否由派生类和重写成员继承。如果该属性可由派生类和重写成员继承,则为 true,否则为 false。默认为 true。
    //AttributeUsageAttribute.AllowMultiple 属性:获取或设置一个布尔值,该值指示能否为一个程序元素指定多个指示属性实例。如果允许指定多个实例,则为 true;否则为 false。默认为 false。
    //AttributeUsageAttribute.ValidOn 属性:获取一组值,这组值标识指示的属性可应用到的程序元素。属性值:一个或多个 AttributeTargets 值。默认为 All。


    //注意:对于一个特性类使用Attribute后缀是一个惯例。然而,如果不添加编译器会自动添加匹配。


    //限定特性类的应用范围  (这里规定ClassMsg这个特性类只能用于类和字段)
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Field, AllowMultiple = true, Inherited = false)]
    //定制MsgAttribute特性类,继承于Attribute  
    public class ClassMsgAttribute : Attribute
    {
        //定义_msg字段和Msg属性//Msg属性用于读写msg字段  
        string _msg;
        public string Msg { get { return _msg; } set { _msg = value; } }
        public ClassMsgAttribute() { }
        //重载构造函数接收一个参数,赋值给_msg字段  
        public ClassMsgAttribute(string s) { _msg = s; }
    }



    //---------------------调用ClassMsg这个特性---------------------//

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

}