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. Forge.autodesk平台的使用

    看了下面的这个网址的教程,发现其中的curl在git集成的shell中不好用,反复尝试后发现,&后面是没有空格的,记录下 https://forge.autodesk.io/

  2. Linux-经常用到的几个命令

    -- |" 拷贝本地到远程 scp /serverdata/server/tomcat-uaac/webapps/dm.war root@172.16.7.123:/serverdata/s ...

  3. plsql解决64位解决办法

    plsql解决64位解决办法 设置PLSQL Developer访问本机64位Oracle 由于在本机Windows Server 2008 R2 X64上安装了64位的Oracle 11.2.0.1 ...

  4. [Tailwind] Control What Variations are Generated for Each Utility Class Module in Tailwind

    In this lesson, we learn how to control what utility classes are generated for each utility class mo ...

  5. 【翻译自mos文章】11.2.0.4及更高版本号的asm实例中MEMORY_TARGET 和 MEMORY_MAX_TARGET的默认值和最小值

    [翻译自mos文章]11.2.0.4及更高版本号的asm实例中MEMORY_TARGET 和 MEMORY_MAX_TARGET的默认值和最小值 来源于: Default and Minimum ME ...

  6. UESTC--1271--Search gold(贪心)

    Search gold Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu Submit Sta ...

  7. 云:VMware

    ylbtech-云:VMware VMware总部位于美国加州帕洛阿尔托 ,是全球云基础架构和移动商务解决方案厂商,提供基于VMware的解决方案,企业通过数据中心改造和公有云整合业务,借助企业安全转 ...

  8. Android开发:ImageView阴影和图层效果

    import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import  ...

  9. $(function(){});里的方法无效问题

    $(function(){})已经是一个匿名函数了,在里面定义的函数已经是私有了,不能全局访问.把函数定义在全局,也就是function外面,这样外部才能调用.

  10. sql server 随机生成布尔值

    ) AS BIT) 或者 )