前言:

attribute是 .net FrameWork 提出的技术,可以为自己的代码添加注解,从而实现些特殊功能。

一. attribute功能

attribute被译作特性,既然是特性,必然功能不一般。

1.微软的说法

MSDN给出的attribute功能:Attribute类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。

预定义的系统的信息也就是.net给出的系统attribute,用户自定义的信息也就是用户定义的attribute。目标元素呢就是指元数据的元素TypeDef(类,结构,枚举,接口,委托),MethodDef,ParamDef,FieldDef,PropertyDef.等等。

2. 自己的看法

无论是定制的Attribute(系统),还是自定义的Attribute 其目的都是为了增强 对你目标元素的修饰。就好比public,private这种修饰符是为了控制对元数据的访问权限。注释是为了方便其他人阅读理解代码。那么应用Attribute的场合就是当我需要对元数据进行修饰。那么问题来了,Attribute究竟能提供什么样的特性,让我们必须要使用它来修饰元数据呢

1)设置我们的Assembly信息

我们创建一个工程时,系统会自动生成一个Assemblyinfo.cs,这个文件就应用了大量了Attribute,为我们提供程序集信息

[assembly: AssemblyTitle("AttributeTest")] //名称

[assembly: AssemblyDescription("")] 

[assembly: AssemblyConfiguration("")]

[assembly: AssemblyCompany("Microsoft")]//程序集公司

2)测试时经常用到的,ConitionAttribute,一个工程中需要测试的方法有很多,你把他归为几类,然后分别进行测试。总不能测试这类的代码就注释掉其他的代码嘛。这样做也太low了。这时候就可以利用ConitionAttribute特性

给各类代码标示上不同的特性。然后在开头使用#define  AttributeName.想测试哪类就使用哪类Attribute名字。

eg。

工程中有两类方法

[Conition("A")]

public void method1()

public void method2()

[Conition("B")]

public void method3()

public void method4()

然后在开头加上#define A

这样运行时就会只识别method1(),method2()

3)上面两种都是系统提供的定制Attribute,那么什么时候使用自定义的呢

有需求的时候其他东西又实现不了的时候就可以考虑自定义Attribute了

比如说,我现在做数据库表的实体类,这样取数据的时候绑定到实体类,不用一个个赋值。数据库中的列对应着实体类的属性。在select 表时,将结果绑定到实体类,你需要遍历实体类属性,所以你必须确保实体类中的都是属性而不是字段或其他什么。那么你如何做到这一点呢,怎么修饰这个元数据使之一定是属性呢:自定义attribute

[AttributeUsage(AttributeTargets.Property)]//指定目标元素只能是属性

class RetriveFromDb : Attribute

{

}

[RetriveFromDb]

public string ID { get; set; }//是property,编译通过

[RetriveFromDb]

public string GRADE = "98";//field,编译不通过

本篇只解释了Attribute功能。后续讲解Attribute特点和如何使用

C#attribute-----------初级的更多相关文章

  1. C#130问,初级程序员的面试宝典

    首先介绍下,目前C#作为一门快速开发的语言,在面试的过程中需要注意的技术知识点,了解下面的知识点对于初级工程师入职非常有帮助,也是自己的亲身体悟. 1.    简述 private. protecte ...

  2. css 初级进阶

    摘自:https://www.jianshu.com/p/dcc40ccc9841 CSS中级 Class和ID选择器 CSS初级教程中我们可以使用HTML标签选择器定义样式. 同样你也可以使用Cla ...

  3. python入门-分类和回归各种初级算法

    引自:http://www.cnblogs.com/taichu/p/5251332.html ########################### #说明: # 撰写本文的原因是,笔者在研究博文“ ...

  4. hadoop入门手册5:Hadoop【2.7.1】初级入门之命令:文件系统shell2

    问题导读 1.改变hdfs文件的权限,需要修改哪个配置文件?2.获取一个文件的或则目录的权限,哪个命令可以实现?3.哪个命令可以实现设置访问控制列表(ACL)的文件和目录? 接上篇:Hadoop[2. ...

  5. .NET Core CSharp初级篇 1-5 接口、枚举、抽象

    .NET Core CSharp初级篇 1-5 本节内容类的接口.枚举.抽象 简介 问题 如果你需要表示星期或者是某些状态,使用字符串或者数字是否不直观? 你是否发现,无论何种电脑,它的USB口的设计 ...

  6. 图解Python 【第五篇】:面向对象-类-初级基础篇

    由于类的内容比较多,分为类-初级基础篇和类-进阶篇 类的内容总览图: 本节主要讲基础和面向对象的特性 本节内容一览图: 前言总结介绍: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 ...

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

    剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...

  8. JavaScript特性(attribute)、属性(property)和样式(style)

    最近在研读一本巨著<JavaScript忍者秘籍>,里面有一篇文章提到了这3个概念. 书中的源码可以在此下载.我将源码放到了线上,如果不想下载,可以直接访问在线网址,修改页面名就能访问到相 ...

  9. [C#] C# 知识回顾 - 特性 Attribute

    C# 知识回顾 - 特性 Attribute [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5911289.html 目录 特性简介 使用特性 特性 ...

  10. js attribute 和 jquery attr 方法

    attribute 是原生js dom 对象上的一个属性,这个属性有很多子属性,比如 isId(判断属性是否是Id) , name (获取属性名称) , value (获取属性值),attribute ...

随机推荐

  1. Mysql锁机制--乐观锁 & 悲观锁

    Mysql 系列文章主页 =============== 从 这篇 文章中,我们知道 Mysql 并发事务会引起更新丢失问题,解决办法是锁.所以本文将对锁(乐观锁.悲观锁)进行分析. 第一部分 悲观锁 ...

  2. 详解Tomcat配置JVM参数步骤

    这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.您可以选择自己的需要选择不同的操作系统和对应的JDK ...

  3. 函数的属性和方法之call、apply 及bind

    一.前言 ECMAScript中的函数是对象,因此函数也有属性和方法.每个函数都包含两个属性:length和prototype.每个函数也包含两个非继承来的方法:apply()和call(),还有一些 ...

  4. 0428css样式

    CSS样式表|-引入的三种方式|--内联样式|----标签内部(空格style)|--内嵌样式|----<head></head>标签内部(<style></ ...

  5. git 学习笔记(常用命令)

    1.新建一个文件,如果没有使用git add 命令将它提交到暂存区,那么这个文件就还没有被跟踪. 2.通过配置.gitignore文件可以指定要忽略的文件,被忽略的文件夹是不会被提交到暂存区的.所以这 ...

  6. LintCode题解之判断是否为平方数之和

    简单粗暴 public class Solution { /* * @param : the given number * @return: whether whether there're two ...

  7. Django REST Framework 最佳实践

    Django REST framework 是一个强大且灵活的工具包,用以构建Web APIs. 为什么要使用REST framework? - 在线可视的API,对于赢得你的开发者们十分有用 - 验 ...

  8. django之允许外部机器访问

    开开启django时,使用0.0.0.0:xxxx,作为ip和端口例如: python3 manage.py runserver 0.0.0.0:9000 然后在settings里修改ALLOWED_ ...

  9. Python3 元组

    Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 如下实例: tup1 = ('Goog ...

  10. Nginx之(四)工作原理

    众所周知,nginx性能高,而nginx的高性能与其架构是分不开的 4.1 进程模型 Nginx在启动后,会有一个master进程和多个worker进程.master进程主要用来管理worker进程, ...