当前位置: 首页 > news >正文

C#编程-属性和反射

在这里插入图片描述

在这里插入图片描述

属性和反射

属性是将元数据信息和行为添加到应用程序代码中的简单技术。属性是允许您将声明信息添加到程序的元素。此声明信息在运行时用途广泛,可使用应用程序开发工具在设计时使用。


介绍属性

对象是由其属性值描述的。例如,汽车可以使用它的构造、型号或颜色来描述。类似地,C#程序具有某些描述和影响它的行为的属性,例如,编译器指令。

属性是证明标记,用于将程序元素(例如:类、枚举器和程序集)的行为信息传递到运行时。声明标记是由位于元素定义(例如类或方法)之上的方括号([ ])描述的。这些标签有助于扩展语言。

属性用于向程序添加元数据(如:编译器指令)和其他信息(如:注释、描述、方法和类)。

.NET Framework具有许多预定义属性。检查预定义属性和作用于其包含的值的代码,也属于运行时和.NET Framework软件开发工具包(SDK)的一部分。


在这里插入图片描述

应用属性

属性被应用到不同的代码元素。这些元素包括程序集、模块、类、结构、枚举、构造函数、方法、属性、字段、事件、接口、参数、返回值和委托。关于属性的信息存储在与它们相关联的元素的元数据中。

以下语法指定了一个属性:

	[attribute(positional_parameters,name_parameter = value, ...)]element

在上面的语法中,属性名及其值在应用属性的元素前的方括号([ ])内被指定。属性可能需要一个或多个参数,定位参数或者命名参数。定位参数用于指定属性的重要信息,而命名参数用于传递属性的可选信息。

.NET Framework支持将以下两个类型的属性用于C#程序中:

  1. 预定义属性:这些属性被作为公共语言运行时(CLR)而提供,且被集成到.NET Framework中。
  2. 自定义属性:这些属性是根据需求创建的属性。

注释
程序集时.NET Framework应用程序的构建块。它构成部署的基本单元。它还包含描述内部版本号以及他们包含的所有数据和对象类型详细信息的元数据。程序集的示例包括.exe和.dll文件。

小问题:
______参数被用于在属性中传递可选信息。
答案:
Named


在这里插入图片描述

使用预定义属性

.NET Framework提供的一些常用预定义属性有:

  1. Conditional:造成根据特定值(如:Debug或Trace)对方法调用使用条件编译。例如,在调试代码时,它显示变量的值。但是,这个属性仅决定当一个方法被调用的时候,将发生的动作。如果需要方法的条件编译,要在代码中使用#if和#endif指令。您可以应用condition属性的方法会受大量的限制。尤其是,它们的返回类型必须是void,并且不能被标记为覆盖,方法的实现应该来自于继承的接口。请思考以下代码行:
	[ 

相关文章:

  • 从CISC到RISC-V:揭开指令集的面纱
  • 使用 PyQt 实现简单数据绑定和组件化
  • 文献阅读:Large Language Models as Optimizers
  • ZZULIOJ 1112: 进制转换(函数专题)
  • 【JaveWeb教程】(26) Mybatis基础操作(新增、修改、查询、删除) 详细代码示例讲解(最全面)
  • 解决方案类常用网址
  • linux如何创建文件教程分享
  • Ubuntu 22.04 Cron使用
  • 数据结构之Radix和Trie
  • 强化学习应用(四):基于Q-learning的物流配送路径规划研究(提供Python代码)
  • 【JavaWeb后端开发-第五章(1)】Mybatis入门基础
  • 常用Java代码-Java中的Optional类和null安全编程
  • VL53L4CD TOF开发(1)----驱动TOF进行测距
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用
  • React16源码: React中的expirationTime过期时间的计算源码实现
  • [PHP内核探索]PHP中的哈希表
  • JavaScript-如何实现克隆(clone)函数
  • [译] 怎样写一个基础的编译器
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • iOS 颜色设置看我就够了
  • leetcode388. Longest Absolute File Path
  • Linux下的乱码问题
  • Redis字符串类型内部编码剖析
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 闭包--闭包之tab栏切换(四)
  • 前端设计模式
  • 微服务核心架构梳理
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (¥1011)-(一千零一拾一元整)输出
  • (007)XHTML文档之标题——h1~h6
  • (8)STL算法之替换
  • (黑马C++)L06 重载与继承
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (译)2019年前端性能优化清单 — 下篇
  • (转)关于pipe()的详细解析
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET与 java通用的3DES加密解密方法
  • .Net语言中的StringBuilder:入门到精通
  • @Bean, @Component, @Configuration简析
  • @JsonFormat与@DateTimeFormat注解的使用
  • @Resource和@Autowired的区别
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [1181]linux两台服务器之间传输文件和文件夹
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [LeetCode] 178. 分数排名
  • [LeetCode]剑指 Offer 40. 最小的k个数
  • [Luogu P3527BZOJ 2527][Poi2011]Meteors(整体二分+BIT)
  • [MySQL复制异常]Cannot execute statement: impossible to write to binary log since statement is in row for