个人定义:不侵入对象的情况下,添加对象附注信息。

官方定义:将预定义的系统信息或用户定义的自定义信息与目标元素相关联。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模   块、参数、属性 (Property)、返回值、结构或其他属性 (Attribute)。提供的信息也称为元数据,元数据可由应用程序在运行时进行检查以控制程序处理数据的方式,也可以由外部工具在运行前检查以控制应用程序处理或维护自身的方式。

.Net 框架提供了三种预定义特性:

  • AttributeUsage
  • Conditional
  • Obsolete

示例: 读取枚举值上加的 特性信息

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MyAttribute
{[Obsolete("这是一个过期特性")]public enum EnumState{       [Remark("我是打开")]//[Remark("")]Open =1,[Remark("我是关闭")]Close=2}
}

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;namespace MyAttribute
{//1.特性的适用范围  2.特性是否允许用多次 3.特性是否被派生类继承[AttributeUsage(AttributeTargets.All,AllowMultiple =true, Inherited =true)]//被调用时执行条件编译,取决于指定的值(如“DEBUG”,"RELEASE"...)[Conditional("DEBUG")]public class RemarkAttribute:Attribute{public string remark;public string Remark{get { return remark; }}public RemarkAttribute(string remark){this.remark = remark;}}public static class RemarkExtend{public static string RemarkDescription(this EnumState state){Type type = typeof(EnumState);FieldInfo info= type.GetField(state.ToString());object[] remarkCustomAttribute= info.GetCustomAttributes(typeof(RemarkAttribute),false);     if(remarkCustomAttribute != null && remarkCustomAttribute.Length>0){RemarkAttribute remarkattribute = remarkCustomAttribute[0] as RemarkAttribute;return remarkattribute.Remark;}else{return state.ToString();}}}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MyAttribute
{class Program{static void Main(string[] args){EnumState state = EnumState.Open;Console.WriteLine(state.RemarkDescription());Console.Read();}}
}

至此,关于特性的学习就到此结束了,谢谢您的阅读。

特性还有很多高级的用法,博主只是小试牛刀,希望本文能够帮到你,当然若有不完善地方,欢迎斧正。

参考MSDN:https://msdn.microsoft.com/zh-cn/library/system.attribute(VS.80).aspx

转载于:https://www.cnblogs.com/jdzhang/p/6910900.html

C# 特性(Attribute)相关推荐

  1. .net 特性 Attribute

    public sealed class RemarkAttribute : Attribute{public string Remark { get; set; }// 构造函数public Rema ...

  2. 区分元素特性attribute和对象属性property

    定义 元素特性attribute是指HTML元素标签的特性 下面的id.class.title.a都是特性,其中a叫做自定义特性 <div id="id1" class=&q ...

  3. .NET基础编程之特性 - Attribute

    这一篇文章是给大家介绍的是:.NET基础编程之特性 - Attribute,对这一部分掌握不熟悉的同学,可以仔细的看一下! 一.特性简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集. ...

  4. Unity游戏开发——C#特性Attribute与自动化

    这篇文章主要讲一下C#里面Attribute的使用方法及其可能的应用场景. 比如你把玩家的血量.攻击.防御等属性写到枚举里面.然后界面可能有很多地方要根据这个枚举获取属性的描述文本. 比如你做网络框架 ...

  5. 特性Attribute

    1.Attribute介绍    我们用VS进行编程时,智能提示再提供方法和属性列表的时候,有时会有下面的这种情况: 提示某个方法已经是过时的了,还会给与提示信息.出现此效果就是Attribute(特 ...

  6. C#的特性Attribute

    一.什么是特性 特性是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签,这个标签可以有多个.您可以通过使用特性向程序添加声明性信息.一个声明性标签是通过放置在它 ...

  7. C# 特性 Attribute

    特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属性.方法等具有某些统一的特征,从而达到某些特殊的需要.举个小栗子:方法的异常捕捉,你是否还在某些可能出现异常的地方(例如数据库的操作.文件 ...

  8. ABP的一些特性 (Attribute)

    大家应该很熟悉Attribute这个东西吧,ABP里面扩展了一些特性,做过滤权限,返回内容等进行控制,在这里小记下,方便后续查看. [DontWrapResult]  //ABP默认对返回结果做了封装 ...

  9. C#的特性(Attribute)详解

    C#特性是指我们可以对类.以及C#程序集中的成员进行进一步的描述,比如我们写一个关于人的类Person,该类可以对人的属性以及某些行为(方法)进行描述.那么如果我们要对人类进行进一步描述呢,比如人这个 ...

  10. 基于特性(Attribute)的实体属性验证方案设计

      各位朋友,我是Payne,大家好,欢迎大家关注我的博客,我的博客地址是https://qinyuanpei.github.io.在这篇文章中,我想和大家探讨下数据校验的相关问题,为什么我会对这个问 ...

最新文章

  1. 在线作图丨如何绘制精美的3D饼图
  2. django 模板里面for循环常用的方法
  3. 【小技巧】Xcode7.1中KSImageNamed无效的解决方法
  4. 实训七(项目准备与创建)
  5. 如何将业务系统的数据抽取汇聚到数据中台?
  6. 使用jdbc执行SQL实现登录查询2-避免SQL注入版
  7. Spring中的自动装配和Autowired
  8. 宠物合成网站源码_为什么加工宠物食品做不到真正的“清洁”?
  9. 高晓松卸任北京阿里巴巴音乐科技有限公司董事长
  10. java cropper 上传_java web 网站头像上传处理 (springmvc +bootstrap+cropper)
  11. 小孤山旁边长江江面很窄
  12. sock 文件方式控制宿主机_docker的容器可视化工具portainer
  13. python 修改用户对文件权限_用户管理相关内容的学习(查看文件权限 修改文件权限chmod 改变文件归属chown和chgrp)...
  14. axure不显示元件库
  15. 【软件相关】Proteus 8入门教程
  16. 金蝶记账王和KIS迷你版的区别
  17. YYText的介绍和使用
  18. 全网最最最详细的软件著作权申请步骤
  19. 安装bcc、cachetop、cachestat
  20. AI面试需要注意哪些事项?

热门文章

  1. REST HTTP中的POST PUT GET
  2. 为什么和平精英无响应_什么和为什么
  3. 半年内使用两次借呗就没法申请房贷?
  4. 历史上唯独倒闭的两家银行,看看他们是如何破产的
  5. 并行执行 Job - 每天5分钟玩转 Docker 容器技术(134)
  6. 利用Photoshop减小照片景深
  7. junit可执行但控制层无法执行_Junit测试时ContextLoader.getCurrentWebApplicationContext()返回空值...
  8. java实现加减乘除运算符随机生成十道题并判断对错_简单小程序——产生三十道小学四则运算题目...
  9. 如何在excel中判断某一点在某一区域内_SEM优化师常用的Excel表格函数集合
  10. function click_click事件的累加问题解决