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

C# 反射和特性(元数据和反射)

元数据和反射

大多数程序都要处理数据,包括读、写、操作和显示数据。(图形也是数据的一种形式。)
然而,对于某些程序来说,它们操作的数据不是数字、文本或图形,而是关于程序和程序类型的信息。

  • 有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程序集中。
  • 程序在运行时,可以查看其他程序集或其本身的元数据。运行中的程序查看本身的元数
    据或其他程序的元数据的行为叫作反射(reflection)。
    对象浏览器是显示元数据的程序的一个示例。它可以读取程序集,然后显示其所包含的类型
    以及类型的所有特征和成员。
    本章将介绍程序如何使用Type类来反射数据,以及程序员如何使用特性来给类型添加元
    数据。

说明 要使用反射,必须使用System.Reflection命名空间。

Type类

之前已经介绍了如何声明和使用C#中的类型,包括预定义类型(int、long和string等)、
BCL中的类型(console、IEnumerable等)以及用户定义类型(MyClass、mydel等)。每一种类
型都有自己的成员和特征。
BCL声明了一个叫作Type的抽象类,它被设计用来包含类型的特征。使用这个类的对象能
获取程序使用的类型的信息。

由于Type是抽象类,因此它不能有实例。在运行时,CLR创建从Type()派生
的类的实例,Type包含了类型信息。当访问这些实例时,CLR不会返回派生类的引用而是返回
Type基类的引用。但是,为了简单起见,在本章剩余的篇幅中,会把引用所指向的对象称为Type
类型的对象(虽然从技术角度来说它是一个BCL内部的派生类型的对象)。
需要了解的有关Type的重要事项如下。

  • 对于程序中用到的每一个类型,CLR都会创建一个包含这个类型信息的Type类型的对象。
  • 不管创建的类型有多少个实例,只有一个Type对象会关联到所有这些实例。
    图25-1显示了一个运行的程序,它有两个MyClass对象和一个OtherClass对象。注意,尽
    管有两个MyClass实例,但只有一个Type对象表示它。

对于程序中使用的每一个类型,CLR都会实例化Type类型的对象

我们可以从Type对象中获取有关类型的几乎所有信息。表25-1列出了类中更有用的成员。
要提取表格内容,需逐行梳理成员、成员类型、返回类型的名字、描述四列信息,以下是提取结果:
Systern.Type类的部分成员

http://www.dtcms.com/a/329992.html

相关文章:

  • 【COMSOL】Comsol学习案例时的心得记录分享
  • 字体优化:Web 排版最佳实践
  • Devextreme-vue + Vue2日历下拉框的使用
  • Redis持久化机制(RDB AOF)
  • Form.Item中判断其他Form.Item的值
  • 边学边做边玩:我的类魂斗罗Java小游戏与Java学习(1)
  • 《MySQL 实战:从建库建表到复杂查询的完整操作指南》
  • Android Framework定制长按电源键关机的窗口
  • 9 ABP Framework 中的 MVC 和 Razor Pages
  • Java pdf工具
  • jvm学习笔记之jvm的生命周期和发展历程
  • Video_AVI_Packet(2)
  • 全球AI安全防护迈入新阶段:F5推出全新AI驱动型应用AI安全解决方案
  • 量子安全新纪元:F5发布全新AI驱动的全栈式后量子加密AI安全方案
  • OpenJDK 17 源码 安全点轮询的信号处理流程
  • ESP-IDF 编译系统说明
  • 单细胞测序分析平台在肿瘤免疫微环境研究中的应用
  • javascript学习
  • element-ui 树形结构的table,自定义展开收起小箭头所在的列
  • 若依前后端分离版学习笔记(九)——登录和操作日志
  • Pyside6 核心模块随笔
  • VS2022+QT5.15.2+OCCT7.9.1的开发环境搭建流程
  • Pytest+selenium UI自动化测试实战实例(超详细)
  • 【css】让浏览器支持小于12px的文字
  • 各种排序算法(二)
  • OpenBMC中的BMCWeb:架构、原理与应用全解析
  • 焊接工业机器人节气装置
  • Apple 的 GPU 加速框架
  • JavaWeb(05)
  • 汽车免拆诊断案例 | 2017 款丰田皇冠车行驶中加速时车身偶尔抖动