原文发布时间为:2008-11-22 —— 来源于本人的百度文章 [由搬家工具导入]

举个简单的例子:
先定义个特性
从Attribute继承,并标明用法

[AttributeUsage(AttributeTargets.Property|AttributeTargets.Class)]
public class MyAttribute:Attribute
{

}

//应用此特性
[My]
public class Entity
{
private int m_MyProperty ;
[My]
public virtual int MyProperty
{
get { return m_MyProperty; }
set { m_MyProperty = value; }
}

}

//检索此特性(在类上标的特性)
class program
{
static void Main()
{
Attribute attr = Attribute.GetCustomAttribute(typeof(Entity), typeof(MyAttribute),false);

}
}

using System;
using System.Collections.Generic;
using System.Text;

using System.Reflection;

namespace baidu
{

    class Class5
    {

        //[Obsolete("no use forever",true)]
        //static void Old() { }

        //static void New() { }
        //public static void Main()
        //{
        //    Old();
        //}
        //static void Main()
        //{
        //     Console.WriteLine(typeof(HumanBase).IsSerializable);
        //     Console.ReadLine();
        //}

        //static void Main()
        //{

        //    BoardingCheckAttribute boardingCheck = new BoardingCheckAttribute("1", "dsf", 1, 1, "df", "df");
        //   Console.WriteLine(boardingCheck.Name
        //                   + "'s ID is "
        //                + boardingCheck.ID
        //                  + ", he/she wants to "
        //                   + boardingCheck.Destination
        //                   + " from "
        //                    + boardingCheck.Departure
        //                    + " by the plane "
        //                   + boardingCheck.FlightNumber
        //                    + ", his/her position is "
        //                 + boardingCheck.PostionNumber
        //                     + ".");
        //    Console.ReadLine();
        //}
        //static void Main()
        //{
        //    Attribute attr = Attribute.GetCustomAttribute(typeof(Base), typeof(HelpAtrribute),true);
        //    if (attr is HelpAtrribute)
        //    {
        //        HelpAtrribute help = (HelpAtrribute)attr;
        //        Console.WriteLine(help.Description);
        //    }
        //    Console.ReadLine();

        //}

        static void Main()
        {
            Type type = typeof(Class1);
            HelpAtrribute helpAttr;
            foreach (Attribute attr in type.GetCustomAttributes(true))
            {
                helpAttr = attr as HelpAtrribute;
                if (helpAttr != null)
                {
                    Console.WriteLine("Description of Class1:\n{0}", helpAttr.Description);
                }
            }

            foreach (MethodInfo method in type.GetMethods())
            {
                foreach (Attribute attr in method.GetCustomAttributes(true))
                {
                    helpAttr = attr as HelpAtrribute;
                    if (helpAttr != null)
                    {
                        Console.WriteLine("Description of {0}:\n{1}", method.Name, helpAttr.Description);
                    }
                }
            }

            foreach (FieldInfo field in type.GetFields())
            {
                foreach (Attribute attr in field.GetCustomAttributes(true))
                {
                    helpAttr = attr as HelpAtrribute;
                    if (helpAttr != null)
                    {
                        Console.WriteLine("Description of {0}:\n{1}", field.Name, helpAttr.Description);
                    }
                }
            }

           
            Console.ReadLine();
        }

        [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = false)]
        public class HelpAtrribute : Attribute
        {
            protected string description;
            public HelpAtrribute(string description)
            {
                this.description = description;
            }
            public string Description
            {
                get { return this.description; }
            }
            protected string version;
            public string Version
            {
                get { return this.version; }
                set { this.version = value; }
            }

        }
        [HelpAtrribute("this is a donothing class")]
        //[HelpAtrribute("this is a doNothing class")]
        public class AnyClass
        {
            [HelpAtrribute("this is a doNothing class")]
            public void AnyMethod()
            {
            }
        }

        [HelpAtrribute("BaseClass")]
        public class Base
        {
        }
        [HelpAtrribute("DeriveClass")]
        public class Derive : Base
        {
        }

        [HelpAtrribute("this is class1")]
        public class Class1
        {
            [HelpAtrribute("this is doNothing Method")]
            public void Anymethod()
            {
            }
            [HelpAtrribute("this is an integer")]
            public int AnyInt=0;
        }
        [HelpAtrribute("this is Class2", Version = "2.0")]
        public class Class2
        {
        }

        //[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class)]
        //public class BoardingCheckAttribute : Attribute
        //{
        //    private string id,name,dep,des;
        //    private int flightnum, positionum;
        //    public BoardingCheckAttribute(string id, string name, int flightNumber, int PostionNumber, string departure, string destination)
        //    {
        //        this.id = id;
        //        this.name = name;
        //        this.flightnum = flightNumber;
        //        this.positionum = PostionNumber;
        //        this.dep = departure;
        //        this.des = destination;
        //    }

        //    public string ID
        //    {
        //        get { return id; }
        //        set { id = value; }
        //    }
        //    public string Name
        //    {
        //        get { return name; }
        //        set { name = value; }
        //    }

        //    public int FlightNumber
        //    {
        //        get { return flightnum; }
        //        set { flightnum = value; }
        //    }
        //    public int PostionNumber
        //    {
        //        get { return positionum; }
        //        set { positionum = value; }
        //    }
        //    public string Departure
        //    {
        //        get { return dep; }
        //        set { dep = value; }
        //    }
        //    public string Destination
        //    {
        //        get { return des; }
        //        set { des = value; }
        //    }
        //}

    }

}

C#的特性学习草稿的更多相关文章

  1. Gradle学习草稿

    参考博客:http://www.cnblogs.com/davenkin/p/gradle-learning-1.html Android Plugin DSL Reference http://go ...

  2. Java8 新特性学习 Lambda表达式 和 Stream 用法案例

    Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...

  3. java8 新特性学习笔记

    Java8新特性 学习笔记 1主要内容 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 2 简洁 速度更快 修 ...

  4. C#特性学习笔记二

    实例探讨: 自定义了一个特性类: [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)] class WahAttribute ...

  5. ES7/8新特性学习随笔

    随着每年EcmaScript都会为js带来一些新特性,带来更多美化的编程体验,今天就走进一下es2016/2017所带来的新特性 ES7新特性 includes() 指数操作符 ES8新特性 asyn ...

  6. java8新特性学习1

    java8增加了不少新特性,下面就一些常见的新特性进行学习... 1.接口中的方法 2.函数式接口 3.Lambda表达式 4.java8内置的四大核心函数式接口 5.方法引用和构造器引用 6.Str ...

  7. python切片、迭代、生成器、列表生成式等高级特性学习

    python高级特性 1行代码能实现的功能,决不写5行代码.请始终牢记,代码越少,开发效率越高. 切片 当我们要取一个list中的前n各元素时,如果前n个少的话,我们还可以一个一个的取,但是若前n个元 ...

  8. C#的特性学习

    转自:https://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html   特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类 ...

  9. 【Java语言特性学习之一】设计模式

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

随机推荐

  1. AJPFX辨析Java中运算符 ++ 和 += 的区别

    我们都知道Java中 ++ 和 +=1  都是把数字增加一后,把值赋给左边,那二者有什么区别呢? i+=1 运行的底层Heap申请一个区域存放i,在数据区域开劈一个区域存放1,2个内存段被数据被送入到 ...

  2. RPC之远程过程调用

    一. 简介 将一个函数运行在远程计算机上并且等待获取那里的结果,这个称作远程过程调用(Remote Procedure Call)或者 RPC. RPC是一个计算机通信协议. 1. 类比: 将计算机服 ...

  3. 在windows上安装Jenkins---tomcat流

    在windows上安装Jenkins有两种方式: (1)jar流 在命令行中运行:java -jar jenkins.war 浏览器访问 localhost:8080,创建初始管理员帐号即可. (2) ...

  4. ie 导出不行,不兼容问题,或只出现后缀文件无法识别

    // 下载模板 @RequestMapping("/download") @ResponseBody public ResponseEntity<byte[]> dow ...

  5. MFC技术积累——基于MFC对话框类的那些事儿5

    4. 菜单 4.1 弹出菜单 本节主要讲解如何在主对话框的指定区域内通过鼠标右击来弹出一个菜单选项.最终效果图如图4.1. 如图4.1鼠标只能在指定区域(图中深色区域)内右击时弹出菜单,在指定区域外点 ...

  6. JDO

    JDO 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象 ...

  7. Vue 2.0 右键菜单组件 Vue Context Menu

    Vue 2.0 右键菜单组件 Vue Context Menu https://juejin.im/entry/5976d14751882507db6e839c

  8. cocos2dx 接入bugly 报错 Fail to get class by NSClassFromString(BuglyAgent)

    ios 端安装文档接入库后,报错 -> static void BuglyJSAgent::reportJSError(JSContext *, const char *, JSErrorRep ...

  9. python 与

    python的与运算是 and &表示的是位运算 c++则是& 和 &&

  10. C ++ _基础之共用体

    由以下代码来进一步学习共用体 #include <stdio.h> #include<iostream> void main() { union un { int a; cha ...