C#中的特性 (Attribute) 入门 (一)
C#中的特性 (Attribute) 入门 (一)
饮水思源
http://www.cnblogs.com/Wind-Eagle/archive/2008/12/10/1351746.html
http://blog.csdn.net/niwalker/article/list/2
http://www.cnblogs.com/yangecnu/p/3759784.html
Desc
MSDN文档的描述
公共语言运行时允许你添加一些类似关键字的描述和声明,叫做Attributes,他对程序中的元素进行标注(类型,字段,方法,属性)等,Attributes和.Net Framework 文件中的元数据保存在一起,可以用来向公共语言运行时描述你的代码,或者在程序运行的时候影响程序的行为。
- 特性可以向程序集中添加元数据。元数据是有关在程序中定义的类型的信息。所有的.Net 程序集都包含指定的一组数据,这些元数据描述,在程序中定义的类型和类型成员。可以添加自定义的特性,以指定所需的任何附加的信息。
- 可以将一个或者多个特性应用到整个程序集、模块或者较小的程序元素。
- 特性可以接收参数
- 程序可以使用反射来检查自己的元数据或其他程序内的元数据。
说了这么多,只要记住特性是用来描述代码的,和特性是在编译时被创建的。
特性参数
许多特性都有参数,而这些参数可以是
- 定位参数 : 任何定位参数必须按照特定顺序指定并且不能省略
- 未命名参数
- 命名参数 : 命名参数是可选的而且可以按任意顺序指定。
[DellImport("user32.dll")]
[DllImport("user32.dll", SetLastError=false, ExactSpelling=false)]
[DllImport("user32.dll", ExactSpelling=false, SetLastError=false)]
特性目标
特性的目标是引用程序特性的实体。默认情况下,特性应用于他后面的元素。但是,可以
显式标识
要将特性应用于方法还是它的返回值等
[assembly: CLSCompliant(true)]
assembly | 整个程序集 |
---|---|
module | 当前程序集模块(不同于 Visual Basic 模块) |
field | 在类或结构中的字段 |
event | Event |
method | 方法或 get 和 set 属性访问器 |
param | 方法参数或 set 属性访问器参数 |
property | Property |
return | 方法、属性索引器或 get 属性访问器的返回值 |
type | 结构、类、接口、枚举或委托 |
常用特性
Obsolete 用来标记方法是一个过时的方法,已经不在使用,.Net Framework 中经常用到这个特性,因为在 .Net Framework 中经常会用一些因为更新而过时的方法,但是MS又不能将其删掉,所以用该特性来告知用户,该方法已经弃用,同时也能保证旧版本是也能被兼容。
参数说明:
Obsolete(message,error)
Message 提示信息
Error: 是否引发语法错误
[Obsolete("这个方法已经被弃用", false)]
static void Debug()
{
Console.WriteLine("Debug");
}
DllImport
导入外部API
//DLLImport 用来标记非.Net 函数,表示该方法在外部的dll中定义
[DllImport("user32.dll", SetLastError = false, ExactSpelling = false)]
public static extern int MessageBox(int hParent, string Message, string Capt, int Type);
Category
//我们在写程序中经常会想要我们的自定义的控件的属性可以直接显示在属性栏中
[Category("Control'name"),Description("Control's description")]
public bool IsShow{get;set}
AttributeUsage
用来标识特性的使用范围
AttributeTargets 标识特性的使用范围
AllowMultiple 标识是否能被多次使用
//标识该特性只能作用于类
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class AuthorAttribute : Attribute
//使用上述特性, 因为上述特性 AllowMultiple 为false,所以下面的代码是会报错的
[Author("鲁迅认识的那只猹", version = 1.0)]
[Author("Temp", version = 1.0)]
public class Student
{
public Student()
{
}
}
Summary
本章我们只是对特性做个一个简单的了解,下一章我们将学习自定义特性 ,我们将用自定义特性做一些很cool的事情。
C#中的特性 (Attribute) 入门 (一)的更多相关文章
- C#中的特性 (Attribute) 入门 (二)
C#中的特性 (Attribute) 入门 (二) 接下来我们要自己定义我们自己的特性,通过我们自己定义的特性来描述我们的代码. 自定义特性 所有的自定义特性都应该继承或者间接的继承自Attribut ...
- c#核心基础 - 浅谈 c# 中的特性 Attribute)
特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签.可以通过使用特性向程序添加声明性信息.一个声明性标签是通过放置在它所应用的元素前面 ...
- c#中的特性Attribute
一:特性是什么?特性怎么创建怎么使用? 这一章节,我想谈谈c#的特性方面的知识,特性大家在工作开发中都很熟悉,比如我们经常见到的 1:key Display --EF 2:Import 3:HttpG ...
- .net中的特性
本文来之:http://hi.baidu.com/sanlng/item/afa31eed0a383e0e570f1d3e 在一般的应用中,特性(Attribute,以称为属性)好像被使用的不是很多. ...
- [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute
剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...
- [C#] C# 知识回顾 - 特性 Attribute
C# 知识回顾 - 特性 Attribute [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5911289.html 目录 特性简介 使用特性 特性 ...
- C# 知识特性 Attribute
C#知识--获取特性 Attribute 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询 ...
- C#中的 特性 详解(转载)
本篇幅转载于:http://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html C#中特性详解 特性提供了功能强大的方法,用于将元数据或声明信 ...
- 区分元素特性attribute和对象属性property
× 目录 [1]定义 [2]共有 [3]例外[4]特殊[5]自定义[6]混淆[7]总结 前面的话 其实attribute和property两个单词,翻译出来都是属性,但是<javascript高 ...
随机推荐
- java 去除末尾的零 如果小数点可以去除同时去除小数点
String s; if(s.indexOf(".") > 0){ //正则表达 s = s.replaceAll("0+?$", "" ...
- LintCode 204: Singleton
LintCode 204: Singleton 题目描述 单例是最为最常见的设计模式之一.对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例.例如,对于class M ...
- bzoj 2726 [SDOI2012]任务安排(斜率DP+CDQ分治)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2726 [题意] 将n个任务划分成若干个块,每一组Mi任务花费代价(T+sigma{ t ...
- 20155322 2016-2017-2 《Java程序设计》第7周学习总结
20155322 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第七周学习的主要内容是课本的第十二第十三章: 第十二章主要内容: "Lambda ...
- [HAOI2006]旅行 题解(kruskal)
[HAOI2006]旅行 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N个景点(编号为1,2,3,-,N),这些景点被M条道路连接着,所有道路都 ...
- oracle04--伪列
1. 伪列 1.1. 什么是伪列 伪列是在ORACLE中的一个虚拟的列. 伪列的数据是由ORACLE进行维护和管理的,用户不能对这个列修改,只能查看. 所有的伪列要得到值必须要显式的指定. 最常用的两 ...
- Java基础break、continue语句的用法
break适用范围:只能用于switch或者是循环语句中.当然可以用于增强for循环. break作用: 1. break用于switch语句的作用是结束一个switch语句. 2. break用于循 ...
- 脚本病毒分析扫描专题1-VBA代码阅读扫盲、宏病毒分析
1.Office Macor MS office宏的编程语言是Visual Basic For Applications(VBA). 微软在1994年发行的Excel5.0版本中,即具备了VBA的宏功 ...
- sleep允许休眠, delay不允许
在Linux Driver开发中,经常要用到延迟函数:msleep,mdelay/udelay. 虽然msleep和mdelay都有延迟的作用,但他们是有区别的. 1.)对于模块本身 mdelay是忙 ...
- HDU 2825 Wireless Password
题目链接:HDU-2825 题意:给出m个单词,要构造出满足包含其中大于等于k个单词的字符串,字符只包括小写字母,问长度为n的这样的串有多少个. 思路:令dp[i][j][k]表示当前已经构造了i个字 ...