.Net Attribute特性
1.特性Attribute不能和属性Property混为一谈, 这是完全不同的两个东西.
2.特性Attribute给类或方法标识的内容, 可以在程序运行的时侯, 通过反射获取到.
例如1: .net添加的单元测试类, 里面有TestClass标识,里面的方法有TestMethod标识, 当用户想运行测试用例时, 一点按钮, 所有的测试用例类, 每个类中的测试方法就都显示在面前, 用户可以自由的选择运行哪些测试类及类中的哪些测试方法, 这是怎么做到的, 相信就是.net通过反射得到所有的TestClass标识的类, 做成一个list显示给用户, 点开这个类, 再通过反射得到所有该类中有TestMethod标识的方法, 再显示给用户, 就这样做到的.
例如2:[Obsolete("这是一个过时的方法")] 加在一个方法或类前时,编译器能提示您这是一个过时的方法,如何做到的?肯定是编译程序时要扫描方法前是否有这个标志,如果有,就给记录下来,显示出来。
3.特性Attribute这个东西类似静态的常量, 属于类所有, 不隶属于每一个特定的对象, 如果没有特性Attribute这个东西, 很多事情就很难做到.
4.内置的三个重要特性Attribute和一个枚举enum AttributeTargets
AttributeUsage
ComVisible
SerializableAttribute
后两个特性实际上代码很简单,就是一个标志, 如SerializableAttribute。
namespace System
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Delegate, Inherited = false)]
[ComVisible(true)]
public sealed class SerializableAttribute : Attribute
{
public SerializableAttribute();
}
}
AttributeUsage比较重要,有三个重要的参数可以设置,
AttributeTargets 这是一个枚举,列出了自定义特性可以用来修饰谁,Class, interface 或者全都可以,多个中间用|隔开。如果你用一个只允许AttributeTargets.Class的特性修饰一个interface去,那注定编译失败。
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)]
AllowMultiple 表示是否可以重复放置此特性来修饰一个方法或类。
[Lzd(Name = "Animal")]
[Lzd(Name = "Animals")]
public class Animal
{
...
}
Inherited 表示是否可以被继承
如果Inherited = false,则派生类继承不了特性。
如果Inherited = true, 派生类可以继承特性,但是,如果AllowMultiple = false, 那么,如果派生类自己也加了同样的特性,则父类的特性会被屏蔽。
参考了下面仁兄的文章:http://www.stuhack.com/biancheng/c_/8272.html
转载于:https://www.cnblogs.com/liuzhendong/archive/2011/07/08/2100812.html
.Net Attribute特性相关推荐
- [C#]Attribute特性(2)——方法的特性及特性参数
上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...
- Attribute特性3——自定义特性AttributeUsage
Attribute特性3--自定义特性AttributeUsage AttributeUsage 预定义特性 AttributeUsage 描述了如何使用一个自定义特性类.它规定了特性可应用到的项目的 ...
- C#基础系列——Attribute特性使用
前言:上篇 C#基础系列--反射笔记 总结了下反射得基础用法,这章我们来看看C#的另一个基础技术--特性. 1.什么是特性:就博主的理解,特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属 ...
- “.NET研究”关于C# 中的Attribute 特性
Attribute与Proper上海企业网站制作ty 的翻译区别 Attribute 一般译作"特性",Property 仍然译为"属性". Attribute ...
- IOC容器特性注入第五篇:查找(Attribute)特性注入
前面几篇文章分别介绍:程序集反射查找,特性,容器,但它们之间贯穿起来,形成查找Attribute注入IOC容器,就得需要下面这个类帮忙: 1.DependencyAttributeRegistrato ...
- Attribute特性定义及应用
目录 一.前期准备 二.特性概念 三.特性案例 1.基础特性 -- 自定义 2.特性实战 -- 自定义 3.常用特性类 -- 官方 1.ObsoleteAttribute 2.AttributeUsa ...
- Attribute 特性详解
详解 概述 特性的一些使用 重复特性 使用带构造函数或者参数的 标记过期的 使用特性 位置 概述 特性是一个直接或间接继承自Attribute的类 特性编译后是metadata 只有反射才能使用 特性 ...
- 利用Attribute特性简化多查询条件拼接sql语句的麻烦
最近公司在做武汉公交信息化管理系统,做这种管理项目,最让人痛苦的就是表单的添加.修改.查询.添加.修改在我以前的文章中提到过,利用反射机制可以做到基本不写代码来完成.参见<ORM框架实现数据的自 ...
- 特性Attribute
1.Attribute介绍 我们用VS进行编程时,智能提示再提供方法和属性列表的时候,有时会有下面的这种情况: 提示某个方法已经是过时的了,还会给与提示信息.出现此效果就是Attribute(特 ...
最新文章
- 代码详解:Numpy——通往人工智能的大门
- (WCF)wcf剖析阅读小计
- 【Flutter】Dart 面向对象 ( mixins 特性 )
- 如何让你的 Linux 系统干净整洁
- 【cocos2d-x从c++到js】20:脚本语言风格的JS代码
- DatabaseMetaData.getIndexInfo
- Windows下安装配置SubVersion的简明步骤
- English trip M1 - PC9 Where am I Teacher:Jade
- 自拍会不会被大数据_大数据教你自拍 脸占画面1/3最漂亮
- VOIP Codec 三剑客之 ISAC/ILBC -- ISAC (4) Pitch Parameters Encode 模块
- 两台计算机如何组成局域网,两台电脑如何建立局域网
- Web大学生网页作业成品——个人班级网站设计与实现(HTML+CSS)
- 我做实施交付那些年——说点废话(1)
- android 指南针 原理,手机指南针原理是什么?安卓/苹果手机指南针app工作原理介绍...
- vim报错E45: ‘readonly‘ option is set (add ! to override)
- 2017计算机一级教学进度表,2016--2017年度第二学期16职高一年级《计算机应用基础》教学进度表...
- JMeter - 如何测试REST API / 微服务
- 【放码过来】谈双重支付
- Revit复制轴网和标高
- 测试听力 html,雅思听力真题(音频+文本)