C# 特性(Attribute)

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

官方定义:将预定义的系统信息或用户定义的自定义信息与目标元素相关联。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模   块、参数、属性 (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

时间: 2024-11-18 10:53:24

C# 特性(Attribute)的相关文章

.NET基础编程之特性 - Attribute

这一篇文章是给大家介绍的是:.NET基础编程之特性 - Attribute,对这一部分掌握不熟悉的同学,可以仔细的看一下! 一.特性简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询特性. 特性具有以下属性: (1)特性可向程序中添加元数据.元数据是有关在程序中定义的类型的信息.所有的 .NET 程序集都包含指定的一组元数据,这些元数据描述在程序集中定义的类型和类型成员.可以添加自定义特性,以

C# 知识特性 Attribute

C#知识--获取特性 Attribute 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询特性,获取特性集合方法是GetCustomAttributes(); 根据约定,所有特性名称都以单词"Attribute"结束,以便将它们与".NET Framework"中的其他项区分.但是,在代码中使用特性时,不需要指定 attribute 后缀.在声明特性类时要以

[C#] 剖析 AssemblyInfo.cs - 从这里了解常用的特性 Attribute

剖析 AssemblyInfo.cs - 从这里了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 上次,我们通过<C# 知识回顾 - 特性 Attribute>已经了解如何创建和使用特性 Attribute,这次,让我们一起来看看每次使用 VS 创建项目时所自带的文件 AssemblyInfo.cs. 目录 核心代码 展开图中的代码,看箭头↓ using System.Reflecti

.NET特性-Attribute

两篇文章有助于学习Attribute特性的概念. http://blog.csdn.net/byondocean/article/details/6802111 http://www.cnblogs.com/JimmyZhang/archive/2008/01/27/1055254.html .NET特性-Attribute

.Net内置特性Attribute介绍

特性Attribute概述 特性(Attribute)是一种特殊的类型,可以加载到程序集或者程序集的类型上,这些类型包括模块.类.接口.结构.构造函数.方法.字段等,加载了特性的类型称之为特性的目标.这里为与属性(Property)区分,所以称之为特性(Attribute).特性是为程序集添加元数据的一种机制,通过它可以为编译器提供指示或者对数据进行说明.例如前段时间学习的Remoting技术(主要用于应用程序域之间的对象通信)中在应用程序域间的引用对象时该对象具有序列化(Serializabl

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

其实attribute和property两个单词,翻译出来都是属性,但是<javascript高级程序设计>将它们翻译为特性和属性,以示区分.本文将详细介绍特性和属性的不同之处 定义 元素特性attribute是指HTML元素标签的特性 下面的id.class.title.a都是特性,其中a叫做自定义特性 <div id="id1" class="class1" title="title1" a='a1'></div

.net之特性(Attribute)

看了一些关于这方面的文档,自我总结: 特性(Attribute)就是对一个方法或类做的一个额外的属性说明,也就是附加说明 下面是我自己抄的一个实例程序: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace SomeTest { class Program { static void Main(string[]

C# 自定义特性Attribute

一.特性Attribute和注释有什么区别 特性Attribute A:就是一个类,直接继承/间接继承Attribute B:特性可以在后期反射中处理,特性本身是没有什么*用的 C:特性会影响编译和运行时功能 注释 A:就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码.注释是编写程序时,写程序的人给一个语句.程序段.函数等的解释或提示,能提高程序代码的可读性 B:注释不能后期处理 二.自定义Attribute特性的使用 自定义Attribute特性的语法 其实特性就是一个类,直接继承

C# 特性(Attribute)(二)

AttributeUsage类是另外一个预定义特性类,它帮助我们控制我们自己的定制特性的使用.它描述了一个定制特性如和被使用.    AttributeUsage有三个属性,我们可以把它放置在定制属性前面.第一个属性是:    ValidOn    通过这个属性,我们能够定义定制特性应该在何种程序实体前放置.一个属性可以被放置的所有程序实体在AttributeTargets enumerator中列出.通过OR操作我们可以把若干个AttributeTargets值组合起来.    AllowMu

C# 特性(Attribute)(一)

特性(Attributes)是一种崭新的声明性信息.我们不仅可以通过特性来定义设计层面的信息(例如help file, URL for documentation)以及运行时(run-time)信息(例如使XML与class相联系),而且我们还可以利用特性建立自描述(self- describing)组件.在这篇教程中,我们将会看到如何建立和添加特性到各种程序实体以及如何在运行时环境中获取特性信息.   定义   正如MSDN中所描述的那样-----     “特性是被指定给某一声明的一则附加的