C# 特性 Attribute

  特性就是在类的类名称、属性、方法等上面加一个标记,使这些类、属性、方法等具有某些统一的特征,从而达到某些特殊的需要。举个小栗子:方法的异常捕捉,你是否还在某些可能出现异常的地方(例如数据库的操作、文件的操作等)经常使用try...catch。这个时候如果使用特性,就可 以大大减少方法里面的try...catch的使用。你只需要定义一个专门捕捉异常的特性类ExceptionExAttribute,然后给这个特性类 做些特殊处理,比如给它增加一个AOP拦截的功能(AOP拦截的方式很多,有兴趣可以搜搜看,园子里面很多类似的文章)。那么在可能出现异常的方法名称上 面加上一个[ExceptionEx]特性标签,这个方法就具有自动捕捉异常的能力。由此可见,特性可以减少统一需求的代码量.

官方描述:

特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。

特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net 框架提供了两种类型的特性:预定义特性和自定义特性

1.预定义特性

.Net 框架提供了三种预定义特性:

·AttributeUsage 起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。

·Conditional 描述了如何使用一个自定义特性类。它规定了特性可应用到的项目的类型。

·Obsolete 这个属性用来标记当前的方法已经被废弃,不再使用了。

举个小栗子a如下:

 [Obsolete("Don't use OldMethod, use NewMethod instead", true)]static void OldMethod(){Console.WriteLine("It is the old method");}static void NewMethod(){Console.WriteLine("It is the new method");}static void Main(string[] args){OldMethod();NewMethod();Console.ReadKey();}

实际上是这样

2.自定义特性

特性是给目标类型添加描述性的元数据,它不会影响代码的运行。自定义特性的命名必须以Attribute结尾,如DefinedAttribute, 而在使用的时候可以直接用[Defined]或者[DefinedAttribute]

小栗子b如下:

        public class DefinedAttribute:Attribute{private string Name { get; set; }private string Sex { get; set; }public DefinedAttribute(string _Name,string _Sex){this.Name = _Name;this.Sex = _Sex;}}public class TestAttribute{[Defined("小明","")][Defined("张伟","")]public void A(){Console.WriteLine("111");}}

 

转载于:https://www.cnblogs.com/miaoying/p/5022253.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

setsockopt , getsoctopt 函数的Level 参数和 name 参数对应表!!!

From: http://blog.csdn.net/jasonm2008/article/details/4016292 int setsockopt( SOCKET s, int level, int optname, const char* optval, int optlen ); 对于这个函数的level级别的参数到底有哪些, optname ,对应的又有哪些,一…

Qt 调用MATLAB引擎混合编程

0、前言 C/C调用MATLAB有三个方式:调用dll文件、调用exe可执行程序和调用Engin引擎。 第一种方式利用MATLAB Coder 将MATLAB代码生成C/C代码和相关动态链接库,可以在没有MATLAB的电脑和设备上运行。 第二种方式利用MATLAB将MATLAB代码编译成exe可执行…

caja 原理 : 前端

作为前端开放的基础安全保证,caja 是目前比较合适的运行机制,包括前端运行环境以及后端编译环境,这次先整体介绍下 caja 在前端是如何屏蔽外部模块代码对整体应用的影响 (注意:官方文档较少,以下为自己理解…

[react] 请说说什么是useImperativeHandle?

[react] 请说说什么是useImperativeHandle? // useImperativeHandle 可以让你在使用 ref 时自定义暴露给父组件的实例值。 // useImperativeHandle 应当与 forwardRef 一起使用:import React, { useImperativeHandle, forwardRef } from react import {…

xcode3.2.6升级至4.0.2经验加教训总结(转)

首先,完美运行都项目直接在Xcode4.0.2中build可能会出现这样一个错误(人品好的自觉绕道):[BEROR]No architectures to compile for (ARCHSi386, VALID_ARCHS). 首先第一反应是打开工程的Build Settings,最基本的检测&a…

扩展欧几里德问题

我们先来看这个问题 求最大公约数的gcd(m,n)方法也可以如下定义: 如果m%n为0,那么gcd(m,n)的值为n. 否则,gcd(m,n)就是gcd(n,m%n) 编写一个递归的方法来求最大公约数。编写一个测试程序,计算gcd(24,16)和gcd(255,5) 我们先引入欧几…

步步为营:Asp.Net序列化Json格式的两种方法

过去我们使用JSON.net序列化一个对象,在asp.net3.5中已经集成了序列化对象为json的方法。 我们分别针对System.Runtime.Serialization.Json和System.Web.Script.Serialization两个命名空间下的不同方法进行序列化和反序列化。 System.Runtime.Serialization.Json (在…

[react] react中setState的第二个参数作用是什么呢?

[react] react中setState的第二个参数作用是什么呢? 第二个参数是一个callback函数,用于setState设置state的属性值成功之后的回调,此时调用this.state.property可以取到刚刚设置的最新的值 个人简介 我是歌谣,欢迎和大家一起…

Qt 调用VISA库通过SCPI程控仪器-以IT8906A电子负载为例

SCPI是一种可编程仪器的标准命令,可通过 GPIB, RS232, USB, LAN接口等控制仪器功能的编程语言。 SCPI 置于 IEEE 488.2 硬件部分的顶层。相同 SCPI 命令和参数控制着不同机器的相同功能。一般标准仪器都支持SCPI协议,如…

TCP控制字段标志:URG、ACK、PSH、RST、SYN、FIN

From: http://blog.csdn.net/wangfeng2500/article/details/7650062 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义是&#x…

Ubuntu 14.04 ThinkPad E431无线网卡驱动安装

Ubuntu 14.04下安装无线网卡驱动。 sudo apt-get install linux-headers-generic build-essential dkms sudo apt-get install linux-source sudo apt-get install --reinstall bcmwl-kernel-source sudo modprobe wl转载于:https://www.cnblogs.com/shoemaker/p/4800772.ht…

关于如何使用的MSCS(微软群集服务器)中的iSCSI Guest Initiators (客户机启动器)...

发布者:Dell-Terry Z 作者:戴尔公司 William U 嗨,大家好!过去的几周实在太激动人心了。第一届戴尔全球存储论坛(Dell Storage Forum)刚刚结束,我有一大堆的东西想跟大家分享,我想…

openssl版本信息和支持的命令

1、查看openssl版本 openssl version -a openssl version 可以看到版本信息和安装位置: 2、查看openssl支持的命令 openssl help Standard commands asn1parse ca ciphers cms crl crl2pkcs7 dgst …

[react] react中的setState是同步还是异步的呢?为什么state并不一定会同步更新?

[react] react中的setState是同步还是异步的呢?为什么state并不一定会同步更新? 由React控制的事件处理程序,以及生命周期函数调用setState不会同步更新state 。 React控制之外的事件中调用setState是同步更新的。比如原生js绑定的事件&…

还是FreeBSD

原文2005年4月13日写在MSN SPACE上 前几天做的FreeBSD服务器在使用过程中,流量大时会自动断线,提示如下一段话: no memory for rx buffer 一直找不出原因。今天把网卡换了,看明天是否还有错。转载于:https://blog.51cto.com/isgod…

python语法笔记(五)

1、python内存管理 (1)对象内存使用 &nsbp;&nsbp;&nsbp;&nsbp;在python中通过执行内建函数 id(obj) 可以获得对象obj在内存中的地址。在python中,整数和短小的字符,python都会缓存这些对象,以便重复使…

python实现手机号归属地相关信息查询

根据指定的手机号码,查询其归属地等相关信息,python实现: 手机号文件:test.txt 13693252552 13296629989 13640810839 15755106631 15119622732 13904446048 18874791953 13695658500 13695658547 15950179080 15573462779 15217…

[react] 请说说什么是useReducer?

[react] 请说说什么是useReducer? 基于 redux 思想实现简易数据控制流,useState 基于 reducer 实现 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关…

不被重视的基础,高效地使用ADO.net连接对象

很多初学者朋友在做项目时遇到过这样的问题,那就是在本地调试运行的程序正常,放到服务器上也是正常的,但是如果有了一些并发之后,就会发现页面会出现打不开的现像,其实大多数时候是因为Ado.net链接没有处理完善。当然对…

quick 中实现单例

直接贴代码 local danli nil local classname class("classname") function classname:getInstance() if danli nil then danli classname.new()     end return danli end return classname 使用 local duixiagn classname:getInstance()转载于:https://…