csharp attributes
· C# Attribute的概念与使用浅析
· http://developer.51cto.com 2009-09-11 11:16 佚名 百度空间 我要评论(0)
C# Attribute是什么呢?在C#实际开发中我们是如何展现C# Attribute的作用呢?那么本文就向你详细介绍这一概念,希望对你有所帮助。
C# Attribute的概念是什么呢?我们经常在C#实际开发中遇到C# Attribute的使用,那么对于这一具体的细节我们需要知道什么才能掌握好C# Attribute呢?那么下面我们来具体的看看。
C# Attribute的概念
C# Attribute是一种崭新的声明性信息。我们不仅可以通过特性来定义设计层面的信息(例如help file, URL for documentation)以及运行时(run-time)信息(例如使XML与class相联系),而且我们还可以利用特性建立自描述(self-describing)组件。在这篇教程中,我们将会看到如何建立和添加特性到各种程序实体以及如何在运行时环境中获取特性信息。
C# Attribute的定义
MSDN中所描述的:“特性是被指定给某一声明的一则附加的声明性信息。”
C# Attribute的定义之使用预定义(Pre-defined)特性
在C#中,有一个小的预定义特性集合。在学习如何建立我们自己的定制特性(custom attributes)之前,我们先来看看在我们的代码中如何使用预定义特性。
1. using System;
2. public class AnyClass
3. {
4. [Obsolete("Don't use Old method, use New method", true)]
5. static void Old( ) { }
6.
7. static void New( ) { }
8.
9. public static void Main( )
10. {
11. Old( );
12. }
13. }
我们先来看一下上面这个例子,在这个例子中我们使用了Obsolete特性,它标记了一个不应该再被使用的程序实体。第一个参数是一个字符串,它解释了为什么该实体是过时的以及应该用什么实体来代替它。实际上,你可以在这里写任何文本。第二个参数告诉编译器应该把使用这个过时的程序实体当作一种错误。它的默认值是false,也就是说编译器对此会产生一个警告。
当我们尝试编译上面这段程序的时候,我们将会得到一个错误:
14. AnyClass.Old()' is obsolete: 'Don't use Old method, use New method'
C# Attribute的定义开发定制特性(custom attributes)
现在让我们来看看如何开发我们自己的特性,首先我们要从System.Attribute派生出我们自己的特性类(一个从System.Attribute抽象类继承而来的类,不管是直接还是间接继承,都会成为一个特性类。特性类的声明定义了一种可以被放置在声明之上新的特性)。
15. using System;
16. public class HelpAttribute : Attribute
17. {
18. }
不管你是否相信,我们已经建立了一个定制特性,现在我们可以用它来装饰现有的类就好像上面我们使用Obsolete attribute一样。
19. [Help()]
20. public class AnyClass
21. {
22. }
注意:对一个特性类名使用Attribute后缀是一个惯例。然而,当我们把特性添加到一个程序实体,是否包括Attribute后缀是我们的自由。编译器会首先在System.Attribute的派生类中查找被添加的特性类。如果没有找到,那么编译器会添加Attribute后缀继续查找。
到目前为止,这个特性还没有起到什么作用。下面我们来添加些东西给它使它更有用些。
23. using System;
24. public class HelpAttribute : Attribute
25. {
26. public HelpAttribute(String Descrition_in)
27. {
28. this.description = Description_in;
29. }
30. protected String description;
31. public String Description
32. {
33. get
34. {
35. return this.description;
36.
37. }
38. }
39. }
40. [Help("this is a do-nothing class")]
41. public class AnyClass
42. {
43. }
在上面的例子中,我们给HelpAttribute特性类添加了一个属性并且在后续的部分中我们会在运行时环境中查寻它。
C# Attribute的相关内容就向你介绍到这里,希望对你了解和学习C# Attribute有所帮助。
csharp attributes相关推荐
- 候选翻译文章列表[示范]
本翻译文章列表持续更新中,大家有好的文章记得告诉我,我会把它们放入该列表的. 个人对于好文章的一些理解: 讲的透彻,不一定要有多少代码,但能够把问题讲清楚 不一定要涉及很难的技术,对于一些基础的东西我 ...
- 收藏——CodeProject - 使用特性(attributes)和激活机制来实现工厂模式
收藏--CodeProject - 使用特性(attributes)和激活机制来实现工厂模式 分类: .NetDelphi2005-03-24 09:57496人阅读评论(0)收藏举报 原文 http ...
- 命令行编译运行CSharp文件
命令行编译运行CSharp文件 找到csc.exe所在的路径.如我本机上为"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" 在环境变量 ...
- Vue 源码阅读(三)Special Attributes
Special Attributes 包括以下:key ref slot v-* key https://vuejs.org/v2/api/#key The key special attribute ...
- R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战
R语言attributes函数(获取属性.设置属性).attr函数(改变一个属性).structure函数(改变数据形状)实战 目录
- 人群场景的属性--Deeply Learned Attributes for Crowded Scene Understandin
Deeply Learned Attributes for Crowded Scene Understanding CVPR2015 http://www.ee.cuhk.edu.hk/~jshao/ ...
- 20170401 11G Deprecated Attributes for LOG_ARCHIVE_DEST_n
[20170401]11G Deprecated Attributes for LOG_ARCHIVE_DEST_n.txt --//前几天与itpub一个网友的交流,提到LOG_ARCHIVE_DE ...
- 关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
关于Microsoft.CSharp.RuntimeBinder.RuntimeBinderException的异常一般来自于两种, 第一种: Predefined type 'Microsoft.C ...
- 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入
用记事本打开专案资料夹里的 *.csproj 找到<ItemGroup>区段 手动加入 <Reference Include="Microsoft.CSharp" ...
最新文章
- ubuntu彻底卸载mysql并且重新安装
- LCD控制器与帧率、刷新率的关系分析
- MAC下MongoDB的安装启动及停止
- 计算机操作系统(4):操作系统的重要功能
- 万智牌天使恩典oracle,#诡局#诡局机制
- php中面向对象静态调用,php面向对象中static静态属性和静态方法的调用_PHP
- wgs84坐标系拾取工具_百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的工具...
- hdu 5053 the Sum of Cube(水)
- log4j2.xml 配置文件详解
- KNN代码学习:将iris.csv处理成bunch格式
- Elasticsearch(006):es中filtered和filter的区别
- [声纹识别]基于MFCC的声纹识别算法
- uc浏览器返回按钮的兼容_浏览器的返回、后退、上一页按钮的事件方法
- [Swift]UIButton文本添加下划线
- 多屏互动的前景探索-互动通-袁珏明
- 黑马小程序品优购商城项目分析
- uniapp 即时通讯_uni-App 仿微信 App 即时通讯|vue+uniapp 聊天
- Set里的元素是不能重复的,那么用什么方法来区分重复与否呢 是用==还是equals() 它们有何区别
- [转]Unsafe at any speed: Memcpy() banished in Redmond
- [leetcode]378. 有序矩阵中第 K 小的元素
热门文章
- OpenGL之简单渲染一个三角形
- LeetCode Algorithm 1290. 二进制链表转整数
- 2018/Province_Java_A/2/星期一
- Django MPTT —— 安装
- Process 'command '/usr/lib/jvm/java-11-openjdk-amd64/bin/java'' finished with non-zero exit value 1
- 模式匹配算法Index
- 【嵌入式】C语言高级编程-数组和结构体初始化(02)
- 【Linux】一步一步学Linux——nstat命令(190)
- [Qt教程] 第44篇 进阶(四)信号和槽
- windows服务器修改端口号,windows服务器修改远程连接端口图解