c#进阶之特性(Attribute)

相信只要是用过.net MVC的开发都用过特性,例如最基础的HttpMethodAttribute特性,用来给接口进行请求方式限定的,等等诸如此类的特性,数不胜数。

那么什么是特性?

特性就是一个类,直接或者间接继承自Attribute。

特性的使用方法有两种:

        [Range(0,10)]
        [Test]
        ///分开单独使用
        public int Hight { set; get; }
        [Test, Range(0, 10)]
        ///合并使用,通过逗号分隔
        public string Name { set; get; }

attribute的使用规则,一般通过在特性类上使用AttributeUsage特性来进行设置

这个特性有三个属性:

AllowMultiple:是否允许重复使用;

Inherited:是否可以被继承;

构造函数有AttributeTargets类型的参数,主要用来设置特性的使用场景(类、接口、属性、字段……)

特性的使用场景:

1、用来做标记,通过判断类、属性……是否有这个特性,来进行一些业务逻辑上的判断,比如:

具体是通过System.Reflection程序集提供的反射功能来进行特性获取,

譬如判断一个类型是否具有某个特性,使用的是IsDefined方法,

获取一个类的所有特性,使用的是GetCustomAttributes方法,获取的是一个object[],可以通过as进行强转为需要判断的类型;

2、一些预设的特性:

ObsoleteAttribute:可以通过添加这个特性,对类、属性、接口等进行代码过期设置;

ConditionalAttribute:通过在方法上设置这个特性,可以屏蔽掉对该方法的所有调用(不过支持返回值是void的方法,毕竟只有这样才不会有在调用的时候有上下文);

经常看到错误日志里面有很详细的信息,具体到了某某文件多少行哪个方法出错等等,其实微软也提供了对应的特性,支持我们自己查看这些内容:

/// <summary>
        ///
        /// </summary>
        /// <param name="filePath">调用的文件物理路径</param>
        /// <param name="num">被调用的行</param>
        /// <param name="name">调用的方法</param>
        public void Call2(string str,
            [CallerFilePath] string filePath = "",
            [CallerLineNumber] int num = 0,
            [CallerMemberName] string name = "")
        {
        }

3、接口的模型绑定属性验证:

可以通过继承ValidationAttribute,并重写IsValid方法即可实现自定义的属性绑定校验。

原文地址:https://www.cnblogs.com/yuchenghao/p/12210708.html

时间: 2024-10-17 07:03:06

c#进阶之特性(Attribute)的相关文章

.NET基础编程之特性 - Attribute

这一篇文章是给大家介绍的是:.NET基础编程之特性 - Attribute,对这一部分掌握不熟悉的同学,可以仔细的看一下! 一.特性简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询特性. 特性具有以下属性: (1)特性可向程序中添加元数据.元数据是有关在程序中定义的类型的信息.所有的 .NET 程序集都包含指定的一组元数据,这些元数据描述在程序集中定义的类型和类型成员.可以添加自定义特性,以

C# 知识特性 Attribute

C#知识--获取特性 Attribute 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询特性,获取特性集合方法是GetCustomAttributes(); 根据约定,所有特性名称都以单词"Attribute"结束,以便将它们与".NET Framework"中的其他项区分.但是,在代码中使用特性时,不需要指定 attribute 后缀.在声明特性类时要以

[C#] 剖析 AssemblyInfo.cs - 从这里了解常用的特性 Attribute

剖析 AssemblyInfo.cs - 从这里了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 上次,我们通过<C# 知识回顾 - 特性 Attribute>已经了解如何创建和使用特性 Attribute,这次,让我们一起来看看每次使用 VS 创建项目时所自带的文件 AssemblyInfo.cs. 目录 核心代码 展开图中的代码,看箭头↓ using System.Reflecti

.NET特性-Attribute

两篇文章有助于学习Attribute特性的概念. http://blog.csdn.net/byondocean/article/details/6802111 http://www.cnblogs.com/JimmyZhang/archive/2008/01/27/1055254.html .NET特性-Attribute

.Net内置特性Attribute介绍

特性Attribute概述 特性(Attribute)是一种特殊的类型,可以加载到程序集或者程序集的类型上,这些类型包括模块.类.接口.结构.构造函数.方法.字段等,加载了特性的类型称之为特性的目标.这里为与属性(Property)区分,所以称之为特性(Attribute).特性是为程序集添加元数据的一种机制,通过它可以为编译器提供指示或者对数据进行说明.例如前段时间学习的Remoting技术(主要用于应用程序域之间的对象通信)中在应用程序域间的引用对象时该对象具有序列化(Serializabl

区分元素特性attribute和对象属性property

其实attribute和property两个单词,翻译出来都是属性,但是<javascript高级程序设计>将它们翻译为特性和属性,以示区分.本文将详细介绍特性和属性的不同之处 定义 元素特性attribute是指HTML元素标签的特性 下面的id.class.title.a都是特性,其中a叫做自定义特性 <div id="id1" class="class1" title="title1" a='a1'></div

.net之特性(Attribute)

看了一些关于这方面的文档,自我总结: 特性(Attribute)就是对一个方法或类做的一个额外的属性说明,也就是附加说明 下面是我自己抄的一个实例程序: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace SomeTest { class Program { static void Main(string[]

C# 自定义特性Attribute

一.特性Attribute和注释有什么区别 特性Attribute A:就是一个类,直接继承/间接继承Attribute B:特性可以在后期反射中处理,特性本身是没有什么*用的 C:特性会影响编译和运行时功能 注释 A:就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码.注释是编写程序时,写程序的人给一个语句.程序段.函数等的解释或提示,能提高程序代码的可读性 B:注释不能后期处理 二.自定义Attribute特性的使用 自定义Attribute特性的语法 其实特性就是一个类,直接继承

【C#进阶系列】17 特性Attribute

这个东西有的叫定制特性,然而我喜欢直接叫特性,但是这样的话一些人不知道我说的是什么,如果我说是Attribute的话那么知道的或者用过的就都懂了. 还记得讲到枚举和位标志那一章,关于位标志,有一个[Flags]的用法. [ComVisible(true)] [Flags] public enum FileAttributes { /***/ } 这里的ComVisible和Flags就是特性. 特性的作用 利用特性可宣告式地为自己的代码构造添加注解来实现特殊功能.它相当于往元数据表里写附加信息,