1什么是Attribute?

在网上看到这样一段定义

MADN的定义为:公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据(metadata)保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。

我总结一下,包括以下几个核心的概念:

  1. Attribute是类;
  2. Attribute功能上类似描述、注释;
  3. 作用的对象是程序的元素,包括了class,method,property,struct等等;
  4. Attribute与.NET的元数据保存在一起,作为一种描述程序的元数据而存在。

2为什么需要Attribute?

Attribute是一种元数据描述,这种描述能够做到:

  1. 向.NET运行时,描述程序自身;
  2. 影响程序的行为。

因此,有着多种用途,例如序列化;安全;防止编译器优化,而方便调试;等等。

3如何使用Attribute?

  1. 所有自定义的Attribute一定要继承自System.Attribute;
  2. 创建Attribute时要注意,自定义Attribute的名称一定要以Attribute做后缀,而使用时,不用带上后缀。例如:CustomAttribute,IDefineAttribute,YouMadeThisAttribute,在使用他们作为程序元数据时,则使用Custom,IDefine,YouMadeThis。

4附上一段MSDN上的描述

The Attribute class associates predefined system information or user-defined custom information with a target element. A target element can be an assembly, class, constructor, delegate, enum, event, field, interface, method, portable executable file module, parameter, property, return value, struct, or another attribute.

Information provided by an attribute is also known as metadata. Metadata can be examined at run time by your application to control how your program processes data, or before run time by external tools to control how your application itself is processed or maintained. For example, the .NET Framework predefines and uses attribute types to control run-time behavior, and some programming languages use attribute types to represent language features not directly supported by the .NET Framework common type system.

All attribute types derive directly or indirectly from the Attribute class. Attributes can be applied to any target element; multiple attributes can be applied to the same target element; and attributes can be inherited by an element derived from a target element. Use the AttributeTargets class to specify the target element to which the attribute is applied.

The Attribute class provides convenient methods to retrieve and test custom attributes. For more information about using attributes, see Applying Attributes and Extending Metadata Using Attributes.

5示例程序

 using System;

 namespace ConsoleApplication1
{
[AttributeUsage(AttributeTargets.Class)]
public class welearnattributeAttribute : Attribute
{
public string Version { get; set; }
public string Description { get; set; }
public int Modify { get; set; }
} [AttributeUsage(AttributeTargets.Method)]
public class methodattriAttribute : Attribute
{
public string Name { get; set; }
} [welearnattribute(Description = "testclassdescription", Modify = , Version = "1.0.0.2")]
public class testclass
{
[methodattri(Name = "warnet's method")]
public void Method()
{
Console.WriteLine("From Method");
}
} public class TestAtrributeClass
{
/*
* output:
* testclassdescription
* 10
* 1.0.0.2
* warnet's method
*/
public static void Solution()
{
var data = typeof(testclass);
var attributes = (welearnattributeAttribute)Attribute.GetCustomAttribute(data, typeof(welearnattributeAttribute));
Console.WriteLine(attributes.Description);
Console.WriteLine(attributes.Modify);
Console.WriteLine(attributes.Version);
var mdattri = (methodattriAttribute)Attribute.GetCustomAttribute(data.GetMethod("Method"), typeof(methodattriAttribute));
Console.WriteLine(mdattri.Name);
}
}
}

6参考链接

  1. http://www.cnblogs.com/luckdv/articles/1682488.html
  2. http://www.cnblogs.com/hyddd/archive/2009/07/20/1526777.html
  3. https://msdn.microsoft.com/zh-cn/library/system.attribute(v=vs.110).aspx?query=

Attribute的理解和认识的更多相关文章

  1. DOM中 property 和 attribute 详解

    被问到 property 和 attribute 的区别,想来也是要好好看一下. 一.基本概念区别 其实Attribute和Property这两个单词,翻译出来都是“属性”,<js高级程序设计& ...

  2. 属性attribute和property的区别

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  3. Python2.2-原理之类型和运算

    此节来自于<Python学习手册第四版>第二部分 一.Python对象类型(第4章) 1. Python可以分解成模块.语句.表达式以及对象:1.程序由模块构成:2.模块包含语句:3.语句 ...

  4. 着色器(Shader)

    着色器(Shader) 顶点着色器(Vertex shader) 片段着色器(Fragment shader) 几何着色器(Geometry Shader) 提供通用计算能力的着色器(Compute ...

  5. 阶段02JavaWeb基础day02&03JavaScript

    javascript知识体系 ECMAScript javascript与html结合方式 内部: <script type="text/javaScript">*** ...

  6. jQuery .attr() vs. .prop()

    Property vs. Attribute 在开始正式比较prop()和attr()两个jQuery方法之前,我们有必要先弄清一下Property和Attribute两个单词的意思.在中文里面,它们 ...

  7. iOS - keychain 详解及变化

    keychain介绍 iOS keychain 是一个相对独立的空间,保存到keychain钥匙串中的信息不会因为卸载/重装app而丢失, .相对于NSUserDefaults.plist文件保存等一 ...

  8. LDAP学习小结【仅原理和基础篇】

    此篇文章花费了好几个晚上,大部分是软件翻译的英文文档,加上自己的理解所写,希望学习者能尊重每个人的努力. 我有句话想送给每个看我文章的人: 慢就是快,快就是慢!!! 另外更希望更多人能从认真从原理学习 ...

  9. django优化--ORM优缺点

    谈Django绕不开ORM ORM : ORM概念,ORM特点,ORM 的优点,ORM 的缺点 orm : 对象关系映射 (Object Relational Mapping) ,用于实现面向对象编程 ...

随机推荐

  1. 使用TotoriseSVN的分支/标签功能

    使用TotoriseSVN的分支/标签功能 http://blog.sina.com.cn/s/blog_5383588c0100o1oo.html 原来在新建一个项目文件夹后,再把Trunk.Bra ...

  2. ASP.NET虚拟路径小结

    一.虚拟路径的概念 “虚拟路径”是指请求 URL 中跟在服务器标识符后面的部分举例. 如绝对路径:http://www.mysite.com/MyApp/Default.aspx,其对应的虚拟路径为: ...

  3. [转]Inside Swift

    原文地址:http://www.eswick.com/2014/06/inside-swift/   Inside Swift Swift is Apple's new programming lan ...

  4. [转]Introduction to Core Bluetooth: Building a Heart Rate Monitor

    ref:http://www.raywenderlich.com/52080/introduction-core-bluetooth-building-heart-rate-monitor The C ...

  5. nc 简单的使用

    非常强大的网络工具nc netcat 下面自己总结了它的几种常用用法(参考了它的man): 1.聊天 ClientA: nc - ClientB: nc A'sIP 1234 2.数据传输 Clien ...

  6. journaling保证意外故障下的数据完整性

    mongoDB研究笔记:journaling保证意外故障下的数据完整性   mongoDB的Journaling日志功能与常见的log日志是不一样的,mongoDB也有log日志,它只是简单记录了数据 ...

  7. sed 入门

         sed 是 stream editor(流编辑器)的缩写.它能够完美配合正则表达式使用.sed命令众所周知的一个功能是文本的替换. 1. sed可以替换给定文本中的字符串.它可以配合正则表达 ...

  8. dotTrace 学习笔记

    KEYGEN!你懂的(点击下载),仅供学习参考! jetbrains 全系列产品,仅支持最新版本(Ultimate 版本),源码就不提供了,感兴趣的自行反编译一下,未混淆.

  9. 伪ajax上传文件

    伪ajax上传文件   最近在折腾伪ajax异步上传文件. 网上搜索了一下,发现大部分方法的input file控件都局限于form中,如果是在form外的呢? 必须动态生成一个临时form和临时if ...

  10. 如何使用Add-on SDK开发一个自己的火狐扩展

    黄聪:如何使用Add-on SDK开发一个自己的火狐扩展 火狐开放了扩展的开发权限给程序员们,相信很多人都会希望自己做一些扩展来方便一些使用. 我最近做一些项目也需要开发一个火狐扩展,方便收集自己需要 ...