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. linux下sort对中文排序

    http://blog.csdn.net/luoleicn/article/details/6162358 设置: export LC_ALL=C;

  2. SQL--各种约束

    约束名称 含义 主键约束 定义一个唯一的标识符 外键约束 为了维护和主键表的数据完整性 check约束 限定表中某个列的值的范围 default约束 如果没有指定插入值,则插入默认值 unique约束 ...

  3. STL之效率比較

    1.vector 变长一维数组,连续存放的内存块,有保留内存.堆中分配内存: 支持[]操作,高效率的随机訪问: 在最后添加元素时,一般不须要分配内存空间,速度快:在中间或開始操作元素时要进行内存拷贝效 ...

  4. asp.net学习指南

    个人总结了一些不错的基础视频教程 视频链接地址(猛戳这里)

  5. Android通过Intent.ACTION_CLOSE_SYSTEM_DIALOGS监听Home按键消息

    Android对屏幕下方经常使用的四个按键消息处理是不一致的: 1.搜索按键的消息在onKeyDown或者onKeyUp中接收: 2.菜单按键的消息在onCreateOptionsMenu.onKey ...

  6. 在 Eclipse 中使用 C++

    安装 安装Eclipse Eclipse下载页 能够选择Eclipse IDE for C/C++ Developers(内置CDT插件) 也能够选择安装其它版本号之后再安装CDT插件. 安装CDT插 ...

  7. HDOJ 2647 Reward 【逆拓扑排序+分层】

    题意:每一个人的基础工资是888. 因为一部分人要显示自己水平比較高,要求发的工资要比其它人中的一个人多.问你能不能满足他们的要求,假设能的话终于一共要发多少钱,假设不能就输出-1. 策略:拓扑排序. ...

  8. windows下PTAM的编译

    前些日子在研究PTAM,以下首先说说PTAM的编译过程,我在XP几WIN7搭配vs2010中均已測试过,都能够执行. 首先下载编译PTAM所必须的库文件.下载地址我会给出 PTAM(PTAM.zip) ...

  9. ROW_NUMBER (Transact-SQL)

    SELECT ROW_NUMBER() OVER ( ORDER BY MemberID DESC ) , * FROM dbo.tbm_mem_Member_Beneficiary ORDER BY ...

  10. 机器学习 数据量不足问题----1 做好特征工程 2 不要用太多的特征 3 做好交叉验证 使用线性svm

    来自:https://www.zhihu.com/question/35649122 其实这里所说的数据量不足,可以换一种方式去理解:在维度高的情况下,数据相对少.举一个特例,比如只有一维,和1万个数 ...