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

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.xdnf.cn/news/17872.html

相关文章:

  • pycharm配置连接服务器
  • 服务器查看 GPU 占用情况的方法
  • 室外 3DVG 基准
  • C# 多线程:并发编程的原理与实践
  • 对线面试官之幂等和去重
  • Python图像处理基础(十三)
  • Ubuntu 20.04 虚拟机安装完整教程:从 VMware 到 VMware Tools
  • 【前端八股文面试题】【JavaScript篇8】作用域链介绍?
  • VMD+皮尔逊+降噪+重构(送报告+PPT)Matlab程序
  • 自动曝光算法参考
  • Datawhale AI夏令营 「2025全球AI攻防挑战赛-赛道一:图片全要素交互认证-生成赛」的赛事项目实践
  • python自学笔记7 可视化初步
  • 使用 Simple Floating Menu 插件轻松实现浮动联系表单
  • GPU 选型指南(一):AI 训练巅峰之选 H100、H200与MI300X/MI325X深度对比
  • 【C++ STL】list详解和模拟
  • 如何用外部电脑访问本地网页?
  • 蒙以CourseMaker里面的录屏功能真的是完全免费的吗?
  • RC4算法实现
  • C# xml UI格式化字符串
  • RxJava 在 Android 中的深入解析:使用、原理与最佳实践
  • 一个接口多个实现类,如何动态调用
  • 【SpringBoot】统一功能处理
  • PCIe Base Specification解析(十)
  • GNN: 配送路径最短 GNN 类型方案对比
  • 内容索引之word转md工具 - markitdown
  • Java Record 类 — 简化不可变对象的写法
  • JavaWeb(05)
  • transforms的使用 小土堆pytorch记录
  • 15-docker的企业级私有仓库之docker-harbor
  • 三极管的基极为什么需要下拉电阻