1.Attribute定义

公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据(metadata)保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。我们简单的总结为:定制特性attribute,本质上是一个类,其为目标元素提供关联附加信息,并在运行期以反射的方式来获取附加信息。

http://kb.cnblogs.com/page/87531/

2.Attribute的长记法和短记法

ConditionalAttribute和Conditional是一样的

// 长记法
[ConditionalAttribute("LI")]
[ConditionalAttribute("NoBug")]
publicstaticvoidFun()
{Console.WriteLine("Created By Li, NoBug.");}
// 短记法
[Conditional("LI")]
[Conditional("NoBug")]
publicstaticvoidFun()
{Console.WriteLine("Created By Li, NoBug.");}

3.预处理指令

#define  debug
虽然选择的是release模式,但是在代码中预定义是debug模式,所以还是代码还是会按照debug模式来执行的

4.常用指令

[Conditional("DEBUG)]     下面的代码在DEBUG模式下,才会被执行,注意里面的DEBUG必须大写,小写就变成预定义指令了
[obsolete ("这段不会执行"),true] 弃用下面的代码段,true代表代码如果执行了,就会抛出一个异常,现实“这段代码不会执行”
[AttributeUsage(AttributeTargets.Class,AllowMultiple=false,inherited = false)]
AttributeUsage确定可以如何使用自定义特性类。 AttributeUsage 是一个可应用于自定义特性定义,以便控制如何应用新特性的特性。 显式应用时默认设置如下所示,第一个属性规定自定义属性可以用在哪些地方,第二属性规定是否可以多用,第三个属性规定自定义属性是否可以继承

5.attribute 的实例化

就像牡蛎天生就要吸附在礁石或船底上一样,Attribute 的实例一构造出来就必需“粘”在一个什么目标上。

Attribute 实例化的语法是相当怪异的,主要体现在以下三点:

  1. 不使用new 操作符来产生实例,而是使用在方括号里调用构造函数来产生实例。
  2. 方括号必需紧挨着放置在被附着目标的前面。
  3. 因为方括号里空间有限,不能像使用new 那样先构造对象,然后再给对象的属性(Property)赋值。

因此,对Attribute 实例的属性赋值也在构造函数的圆括号里。并且,Attribute 实例化时尤其要注意的是:

 1. 构造函数的参数是一定要写。有几个就得写几个,因为你不写的话实例就无法构造出来。

 2. 构造函数参数的顺序不能错。调用任何函数都不能改变参数的顺序,除非它有相应的重载(Overload)。因为这个顺序是固定的,有些书里称其为“定位参数”(意即“个数和位置固定的参数”)。

 3. 对Attribute 实例的属性的赋值可有可无。反正它会有一个默认值,并且属性赋值的顺序不受限制。有些书里称属性赋值的参数为“具名参数”。

6.自定义Attribute 实例

这个不会

7..通过反射来捕捉属性的值

首先自定义一个Person类

classPerson:Attribute{
privatestring _name;
privateint _age;
publicstringName{
set{this._name = value;}
get {returnthis._name;}
}
publicintAge{
set{this._age = value;}
get {returnthis._age;}
}
publicPerson(string s,int i){
this.Name= s;
this.Age= i;
}
}

再在使用一个类的时候加上这个属性

[Person("spike",23)]
class test {
privateint aa;
publicstring ss;
}

再在Main函数中使用type类型的的GetCustomAttributes方法来返回属性的类,达到遍历属性类的目的

Person per;
foreach(var item intypeof(test).GetCustomAttributes(true)){
per = item asPerson;//若item是自定义的Person类,则将Person类返回
if(per !=null){
Console.WriteLine(per.Name);
Console.WriteLine(per.Age);
}
}
Console.ReadKey();

ASP.NET--Attribute定义及用法的更多相关文章

  1. C#中的Attribute定义及用法

    1.Attribute定义 公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法和属性等.Attributes和Microsoft .N ...

  2. Asp.net中的ViewState用法

    Session,ViewState用法基本理论:session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控 ...

  3. JS splice() 定义和用法

    定义和用法 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 注释:该方法会改变原始数组. 语法 arrayObject.splice(index,howmany,item1, ...

  4. CSS :hover伪类选择定义和用法

    伪类选择符E:hover的定义和用法: 设置元素在其鼠标悬停时的样式.E元素可以通过其他选择器进行选择,比如使用类选择符.id选择符.类型选择符等等.特别说明:IE6并非不支持此选择符,但能够支持a元 ...

  5. indexOf()定义和用法

    indexOf()定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. 语法 stringObject.indexOf(searchvalue,fromindex) ...

  6. slice 定义和用法

    定义和用法 slice() 方法可从已有的数组中返回选定的元素. 语法 arrayObject.slice(start,end) 参数 描述 start 必需.规定从何处开始选取.如果是负数,那么它规 ...

  7. js indexof用法indexOf()定义和用法

    indexOf()定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. 语法 stringObject.indexOf(searchvalue,fromindex) ...

  8. ASP.NET中Dictionary基本用法实例分析

    本文实例讲述了ASP.NET中Dictionary基本用法.分享给大家供大家参考,具体如下: //Dictionary位于System.Collections.Generic命名空间之下 /*  * ...

  9. mysqli_query 的定义和用法

     定义和用法 mysqli_query() 函数执行某个针对数据库的查询. 语法 mysqli_query(connection,query,resultmode); 参数 描述 connecti ...

随机推荐

  1. System v shm的key

    shmget函数用于创建或打开一个共享内存区对象,shmget成功调用会返回一个共享内存区的标识符,供其它的共享内存区操作函数使用. key:用于创建共享内存区的键值,这个在前面其他System IP ...

  2. HDU 3507

    斜率DP入门题.推荐看看这篇http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 看过之后,自己思考,发现有些不妥之处就是,其 ...

  3. Android studio 自己主动排版

    一開始非常纠结于Android studio怎样有快捷键自己主动排版换行.找了网上非常多的快捷键并没实用.有说ctrl+shift+L的,我试了试全然没用.只是最后我还是找到了一个最好的办法.事实上有 ...

  4. mysql Access denied for user 'root'@'localhost' (using password: YES)

    [现象说明] C/S程序远程訪问正常,本地訪问报下面异常 MySql.Data.MySqlClient.MySqlException (0x80004005): Authentication to h ...

  5. 数据结构(Java语言)——LinkedList简单实现

    下面是一个能够使用的LinkedList泛型类的实现.这里的链表类名为MyLinkedList,避免与类库中反复. MyLinkedList将作为双链表实现,并且保留到该表两端的引用.这样仅仅要操作发 ...

  6. HDU 1754(线段树区间最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. BroadcastReceiver类

    java.lang.Object    ↳ android.content.BroadcastReceiver 已知直接子类 AppWidgetProvider DeviceAdminReceiver ...

  8. 关于Win 10的隐私保护政策

    近日.有人责备Win10收集用户信息,事实上这样的指责并不公平,比方:"Privacy Groups Claim Microsoft Uses Windows 10 as Big Broth ...

  9. 2017第33周四JDK8并发

    Java 8在Lambda表达式.接口默认方式.新的日期API等方面引入的新特性广受关注,同时在并发编程方面也做出了大量改进.以往的几个Java版本都对java.util.concurrent做了不同 ...

  10. Reusability1

    Reusability 1. 复用的层面 1.1 代码级别复用 顾名思义,代码复用就是把代码都搬过来,这是最主要的复用 1.1.1 白盒复用 白盒的意思就是里面的东西我们都知道是什么,具体实现的方式也 ...