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特性相关推荐

  1. [C#]Attribute特性(2)——方法的特性及特性参数

    上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...

  2. Attribute特性3——自定义特性AttributeUsage

    Attribute特性3--自定义特性AttributeUsage AttributeUsage 预定义特性 AttributeUsage 描述了如何使用一个自定义特性类.它规定了特性可应用到的项目的 ...

  3. C#基础系列——Attribute特性使用

    前言:上篇 C#基础系列--反射笔记 总结了下反射得基础用法,这章我们来看看C#的另一个基础技术--特性. 1.什么是特性:就博主的理解,特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属 ...

  4. “.NET研究”关于C# 中的Attribute 特性

    Attribute与Proper上海企业网站制作ty 的翻译区别 Attribute 一般译作"特性",Property 仍然译为"属性". Attribute ...

  5. IOC容器特性注入第五篇:查找(Attribute)特性注入

    前面几篇文章分别介绍:程序集反射查找,特性,容器,但它们之间贯穿起来,形成查找Attribute注入IOC容器,就得需要下面这个类帮忙: 1.DependencyAttributeRegistrato ...

  6. Attribute特性定义及应用

    目录 一.前期准备 二.特性概念 三.特性案例 1.基础特性 -- 自定义 2.特性实战 -- 自定义 3.常用特性类 -- 官方 1.ObsoleteAttribute 2.AttributeUsa ...

  7. Attribute 特性详解

    详解 概述 特性的一些使用 重复特性 使用带构造函数或者参数的 标记过期的 使用特性 位置 概述 特性是一个直接或间接继承自Attribute的类 特性编译后是metadata 只有反射才能使用 特性 ...

  8. 利用Attribute特性简化多查询条件拼接sql语句的麻烦

    最近公司在做武汉公交信息化管理系统,做这种管理项目,最让人痛苦的就是表单的添加.修改.查询.添加.修改在我以前的文章中提到过,利用反射机制可以做到基本不写代码来完成.参见<ORM框架实现数据的自 ...

  9. 特性Attribute

    1.Attribute介绍    我们用VS进行编程时,智能提示再提供方法和属性列表的时候,有时会有下面的这种情况: 提示某个方法已经是过时的了,还会给与提示信息.出现此效果就是Attribute(特 ...

最新文章

  1. 代码详解:Numpy——通往人工智能的大门
  2. (WCF)wcf剖析阅读小计
  3. 【Flutter】Dart 面向对象 ( mixins 特性 )
  4. 如何让你的 Linux 系统干净整洁
  5. 【cocos2d-x从c++到js】20:脚本语言风格的JS代码
  6. DatabaseMetaData.getIndexInfo
  7. Windows下安装配置SubVersion的简明步骤
  8. English trip M1 - PC9 Where am I Teacher:Jade
  9. 自拍会不会被大数据_大数据教你自拍 脸占画面1/3最漂亮
  10. VOIP Codec 三剑客之 ISAC/ILBC -- ISAC (4) Pitch Parameters Encode 模块
  11. 两台计算机如何组成局域网,两台电脑如何建立局域网
  12. Web大学生网页作业成品——个人班级网站设计与实现(HTML+CSS)
  13. 我做实施交付那些年——说点废话(1)
  14. android 指南针 原理,手机指南针原理是什么?安卓/苹果手机指南针app工作原理介绍...
  15. vim报错E45: ‘readonly‘ option is set (add ! to override)
  16. 2017计算机一级教学进度表,2016--2017年度第二学期16职高一年级《计算机应用基础》教学进度表...
  17. JMeter - 如何测试REST API / 微服务
  18. 【放码过来】谈双重支付
  19. Revit复制轴网和标高
  20. 测试听力 html,雅思听力真题(音频+文本)

热门文章

  1. java Function Interface BinaryOperator<T>
  2. Java proxy 子类代理
  3. python click
  4. python pytest 前置后置
  5. python 字典(dict)
  6. opencv-api adaptiveThreshold
  7. numpy reshape
  8. redis mysql 集群_Redis(五)、Redis数据库集群相关
  9. JAVA就诊叫号_基于B/S的JAVA门诊就诊系统
  10. python创建二维数组的方法_Python创建二维数组的正确姿势