C#中的Attribute 特性入门总结--从DotNET平台调用Win32 API

C#- Attribute(特性) C# 的Attribute(特性)用法预定义的特性可以用来为代码添加元数据和指示编译器和运行时执行特定的操作。同时可以增加代码的功能和可读性。[Serializable] 特性:用于标记一个类或结构体可序列化,并可以在网络上传输或保存到磁盘上。// ...[Obsolete] 特性:用于标记一个方法、属性或类已经过时,并提供相应的替代方案或建议。下面设置为true是启动报错。默认为false。// ...[Conditional] 特性:用于指定一个方法只有在满足特定条件编译指令时才会被编译。 阅读详情
以下内容全部来自网上片段总结:
摘要:纠结地说,这应该算是一篇关于Attribute 的笔记,其中的一些思路和代码借鉴了他人的文笔(见本文底部链接)。但是,由于此文对Attribute 的讲解实在是叫好(自夸一下 ^_^),所以公之于众,希望能对大家有所帮助。

  Attribute与Property 的翻译区别

  Attribute 一般译作“特性”,Property 仍然译为“属性”。

  Attribute 是什么

  Attribute 是一种可由用户自由定义的修饰符(Modifier),可以用来修饰各种需要被修饰的目标。

  简单的说,Attribute就是一种“附着物” —— 就像牡蛎吸附在船底或礁石上一样。

  这些附着物的作用是为它们的附着体追加上一些额外的信息(这些信息就保存在附着物的体内)—— 比如“这个类是我写的”或者“这个函数以前出过问题”等等。

  Attribute 的作用

  特性Attribute 的作用是添加元数据。
  元数据可以被工具支持,比如:编译器用元数据来辅助编译,调试器用元数据来调试程序。

  Attribute 与注释的区别

  • 注释是对程序源代码的一种说明,主要目的是给人看的,在程序被编译的时候会被编译器所丢弃,因此,它丝毫不会影响到程序的执行。
  • 而Attribute是程序代码的一部分,不但不会被编译器丢弃,而且还会被编译器编译进程序集(Assembly)的元数据(Metadata)里,在程序运行的时候,你随时可以从元数据里提取出这些附加信息来决策程序的运行。

  举例:

  在项目中,有一个类由两个程序员(小张和小李)共同维护。这个类起一个“工具包”(Utilities)的作用(就像.NET Framework中的Math类一样),里面含了几十个静态方法。而这些静态方法,一半是小张写的、一半是小李写的;在项目的测试中,有一些静态方法曾经出过bug,后来又被修正。这样,我们就可以把这些方面划分成这样几类:

Box

  我们分类的目的主要是在测试的时候可以按不同的类别进行测试、获取不同的效果。比如:统计两个人的工作量或者对曾经出过bug的方法进行回归测试。

  如果不使用Attribute,为了区分这四类静态方法,我们只能通过注释来说明,但这种方式会有很多弊端;

  如果使用Attribute,区分这四类静态方法将会变得简单多了。示例代码如下:

    
C#元数据膨胀如何拖慢.NET程序性能 元数据是.NET运行时实现类型安全、反射、序列化和JIT优化的基础机制,其本质是一组嵌入程序集的结构化描述信息;它在进程加载时即被完整映射进内存,直接推高Working Set并加剧CPU缓存污染;尽管不触发异常或明显耗时逻辑,却通过Page Fault延迟、L1缓存失效率上升和内存带宽争用等隐性路径持续损耗性能;典型WPF或ASP.NET Core应用中,元数据可占程序集体积60%以上,且与是否显式调用反射无关;本文聚焦于医疗影像系统、桌面工具等对启动时间与内存敏感的场景,揭示元数据作为‘隐性税负’的技术 阅读详情

相关推荐

.NET生产环境稳定性实战:AsyncLocal、ConcurrentDictionary与序列化陷阱

.NET运行时稳定性并非仅由语法或框架版本决定,其核心在于CLR线程模型、内存管理机制与序列化契约在真实硬件和OS调度下的行为表现。AsyncLocal的值丢失本质是ExecutionContext流动的边界问题;ConcurrentDictionary的性能退化源于哈希冲突导致的分段锁失效;而Newtonsoft.Json的TypeNameHandling则暴露了类型反序列化的安全与兼容性风险。这些现象共同指向.NET工程师必须掌握的底层能力:理解IL执行上下文、GC代际交互、IOCP线程调度及序列化信任

didi9310的博客 428

C#中特性(Attribute)的使用

1.特性是一个类,它继承于Attribute。它对程序中的元素进行标注,如类型、字段、方法和属性等。 Attribute是程序代码的一部分,它不会被编译器丢弃,而且还会被编译器编译进程序集(Assembly)的元数据(Metadata)里。 [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] //表示该特性可以修饰字段,属性 、(Class、Method)可修饰类、方法 public class FieldFo

m0_37880556的博客 1070

Attribute在.net编程中的应用(全)

此文档详细的介绍了.NET下 自定义Attribute的应用,对于理解.NET AOP下的技术实现非常有帮助

c# 根据自定义Attribute排序

add a class: publicclassExportAttribute:Attribute { publicintFieldOrder{get;set;} publicExportAttribute(){} }add[ExportAttribute(FieldOrder=2)] on the Field [DisplayNa...

weixin_30646505的博客 523

告别底噪和发热:TPA3255的PCB布局与散热设计保姆级教程(附嘉立创EDA文件)

本文详细解析TPA3255 Class D音频功放的PCB布局与散热设计,提供从电源系统分层架构到热管理系统的全流程优化方案。通过实战案例展示如何消除底噪、降低发热,并附嘉立创EDA文件,助力工程师快速设计高性能音频功放。

weixin_29208077的博客 376

费斯托SPAN压力传感器的调试

本体为压力传感器,检测气压大小,通过设置参数,在上电上气时对气压进行判断,进而通过自身逻辑的判断,控制传感器的通断,进而控制机械部位的工作与运行;通电之后为如下图所示的样子有三个按键ABEdit键(编辑键、确认键)两步即可轻松连接。

大小曲奇的博客 1万+

学习C#中的特性Attribute 类

最近一个朋友问我C#中经常有使用[XXX]方括号是什么作用?是啊,我是经常使用,还真没有深入的看。想来想去还是微软定义的准确就搬些来“ Attribute 类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模块、参数、属性、返回值、结构或其他特性。特性所提供的信息也称为元数据。元数据可由应用程序在运行时进行检查以控制程序处理数据的方式,也可以由外部工具在运行前检查以控制应用程序处理或维护自身的方式。例如,.NE

大秦千叶飞鸿 746

张正友标定法-MATLAB实验

该方法最早由微软研究院的Zhengyou Zhang教授提出,1998年发表在IEEE TRANSACTIONS ON PATTERNANALYSIS AND MACHINE INTELLIGENCE,论文题目为:AFlexible New Technique for Camera Calibration。 (一)标定平面到图像平面的单应性 单应性(homography):在计算机视觉中被定义

qq_37845624的博客 8288

C# 特性(Attribute)

特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。 特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net 框架提供了两种类型的特性:预定义特性和自定义特性。 规定特性(Attribute) 规定特性(Attribute)的语法如下: [attribute(positional_param

weixin_43055166的博客 576

lattice 黑盒子的生成和使用(Creating Your Own Black Box Modules)

很多客户,特别是外包项目,需要做黑盒子,防止他人看到源码,那么这就需要对相关的源码打包加封了。diamond help 说的也是模糊模糊的,这次给出实际验证过的流程。 1.先将要加封的模块间一个工程,建好工程,写好代码之后,模块名字叫做crosslink(这个使用黑盒子的时候要用),代码如下: module crosslink( output wire[3:0] led, input wire clk, input wire reset ); reg [29:0] cnt; reg [3:0] led1;

qq_39633876的博客 1481

PCL 欧式聚类(C++详细过程版)

为充分了解算法实现的每一个细节和有待改进的地方,使用C++代码对算法实现过程进行复现。

点云侠的博客 2447

Windows开发代码覆盖测试实战:从语句到路径覆盖的完整指南

代码覆盖测试是白盒测试的核心技术,用于量化测试用例对源代码的覆盖程度。其原理是通过插桩记录程序执行路径,衡量测试的完整性。这项技术的价值在于能系统性地暴露未测试代码,这些往往是潜在的缺陷藏身地,对于提升软件可靠性至关重要。在工程实践中,它广泛应用于驱动开发、系统服务和高可靠性客户端应用等场景,帮助开发者建立交付信心。本文聚焦于**Windows平台开发**,深入解析**语句覆盖、判定覆盖、条件覆盖、条件-判定覆盖、组合覆盖和路径覆盖**这六大准则,并结合典型Windows编程场景(如GUI交互、COM组件、

weixin_34342207的博客 339

YOLOv8极速瘦身实战:LAMP剪枝让模型又快又准

一个庞大的模型虽然强大,但在实际部署,尤其是资源受限的边缘设备(如无人机、移动电话、嵌入式系统)上,却面临着严峻的挑战:高昂的内存占用、巨大的计算量以及随之而来的高延迟和高能耗。本教程从LAMP剪枝的深刻理论出发,详细解释了它如何通过最小化最坏情况下的L2失真,并借助巧妙的数学简化,最终推导出一种高效、无超参数、层自适应的剪枝策略。它如同为臃肿的模型进行一次精准的“瘦身手术”,通过移除网络中冗余或不重要的权重、神经元甚至整个结构,来显著降低模型的参数量和计算量(FLOPs),从而实现推理加速和资源节约。

FJN110的博客 257

DotNetGuide特性编程:自定义Attribute的应用

在.NET开发中,我们经常需要为代码元素(类、方法、属性等)添加额外元数据,用于描述其行为、用途或约束。传统方式往往依赖注释或配置文件,不仅维护成本高,还无法在运行时动态获取。自定义Attribute(特性)正是解决这一痛点的强大工具——它允许开发者将元数据直接嵌入代码,通过反射机制在编译时或运行时灵活读取,实现业务逻辑与元数据的解耦。 **读完本文你将掌握:** - Attribute的核心工...

gitblog_00871的博客 994

34 python 时间和日期

介绍python里时间和日期的常用方法,以及案例,还有注意事项。

水滴爬呀爬 347

【WebRTC】【Unity】Unity Web RTC1-Unity中简单实现远程画面

平台:基本常用平台包括安卓,苹果(max和IOS),Windows64,Linux都行。10. 注意,如果从移动设备浏览器连接服务,信令服务器的SSL证书一定要先设好。想要在Unity中实现实时远程桌面,找到了Render Streaming这个手段,本篇介绍相应的使用方法和实例。8. 打开电脑浏览器,地址栏输入http://127.0.0.1,点击Receiver Sample。新建Unity项目,模板选Third Person,Project Name随意。启动App,控制台出现如下信息表示成功。

每日出拳老爷子的博客 2518

.Net Attribute 特性 自定义特性(二)

在实际开发中,我们经常看到如MVC中标记在方法上的 [HttpGet] [HttpPost][HttpDelete][HttpPut] ,序列化时标记在类上的 [Serializable] ,使用EF标记属性的 [Key] ,使用特性的地方随处可见。二次升级已完成,看看代码,瞬间心情舒畅。细心的朋友会发现,校验返回的都是true跟false,每次遇到校验不通过的字段后下面的都不再校验了,想要返回所有未校验通过的字段,并告诉调用者,一次性把所有字段都按照格式填好,这样才是我们想要的效果。

lwpoor123的博客 1533

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

.Net Attribute详解(上)-Attribute本质以及一个简单示例

Attribute的直接翻译是属性,这和Property容易产生混淆,所以一般翻译成特性加以区分。Attribute常常的表现形式就是[AttributeName], 随意地添加在class, method的头上,然后就能够产生各种各样奇特的效果和行为。比如关于序列化的标签[Serializable]用来指定一个实体类可以序列化。[NonSerialized]可以用来指定某些属性不包含在序列化...

weixin_34296641的博客 213

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C#使用属性、反射减少代码耦合

最近有个需求,需要经常动态添加数据,但是添加数据的那个类很大,而且有两个人同时修改。为了减少冲突,我就把动态添加数据的那部分提取出去,并且想到使用属性和反射减少耦合。 结果就是:我在数据类里添加一个方法,就动态添加一个字典数据,不用去修改其他地方的代码。 属性类: [AttributeUsage(AttributeTargets.Method)] class ExportAttribute:System.Attribute { private string key;

niuge8905的博客 449

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# Webapi中[ApiController]特性的功能,即使用

第一:背景: 之前对这个特性一知半解,了解的不够深入,在试用期的工作中,问到这个特性,需要深入了解 第二个:正文,作用及使用 //[ApiController] //启用下述 API 特定的固定行为: /* * •特性路由要求 不能通过由 Startup.Configure 中的 UseEndpoints、UseMvc 或 UseMvcWithDefaultRoute 定义的传统路由访问操作。即写[Route()] •自动 HTTP 400 响应 ...

xu2034029667的博客 1万+

如何在ASP.NET Core中创建自定义AuthorizeAttribute?

I'm trying to make a custom authorization attribute in ASP.NET Core. 我正在尝试在ASP.NET Core中创建自定义授权属性。

p15097962069的博客 4631

.NET Attribute的自描述机制 一

   Attribute是C#的自描述的基类,用于对appliction element进行描述,比如程序集,类,方法,字段,属性等等。他它与正常定义的类不同,它是在编译时实例化的,普通的类是在运行时实例化。Attribute的派生类也可以应用AttributeUsage类型进行描述,AttributeUsage(AttributeTarget target),其中AttributeTarget target是可选参数,在其中还可以应用命名参数,for example: AttributeUsage(Att

liaoxiaoli99的专栏 1197

ASP.NET Core中数据绑定的Attribute

概要 ASP.NET Core的Web API在调用过程中,经常涉及到Client端参数传递和Server端参数的接收的问题。其中参数主要包括URL参数,表单参数和路由参数等,如何处理好各种类型的参数传递,尤其是复杂类型参数的处理,是正确调用Web API的关键也是难点。 本文通过介绍FromQueryAttribute,FromRouteAttribute和FromBodyAttribute三个Attribute,来介绍如果在URL,表单和路由中传递对复杂的对象参数。 定义 FromQueryAttrib

weixin_43263355的博客 2478

VS项目属性的一些配置项的总结(important)

以下内容为“原创”+“转载” 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系,假设新建一个项目ssyy,解决方案起名fangan,注意解决方案包括项目,此时生成的最外层目录为fangan代表整个解决方案的内容都在这个文件夹内。在这个fangan文件夹内包含有fangan.sln的解决方案配置文件和一个ssyy文件夹,

Wait的专栏 2万+
上一篇: 生啤,熟啤,纯生啤,扎啤
下一篇: WPF深入浅出话资源【好】
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值