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

C# 反射和特性(获取Type对象)

获取Type对象

本节学习,使用实例对象的GetType方法和typeof运算符和类名来获取Type对象。object
类型包含了一个叫作GetType的方法,它返回对实例的Type对象的引用。由于每一个类型最终
都是从object派生的,所以我们可以在任何类型的对象上使用GetType方法来获取它的Type对
象,如下所示:

Type t=myInstance.GetType();

下面的代码演示了如何声明一个基类以及从它派生的子类。Main方法创建了每一个类的实例
并且把这些引用放在了一个叫作bca的数组中以方便使用。在外层的foreach循环中,代码得到
了Type对象并且输出类的名字,然后获取类的字段并输出。图25-2演示了内存中的对象。

using System;
using System.Reflectionclass BaseClass
{public int BaseField=0;
}class DerivedClass:BaseClass
{public int DerivedField=0;
}class Program
{static void Main(){var bc=new BaseClass();var dc=new DerivedClass();BaseClass[] bca=new BaseClass[]{bc,dc};foreach(var v in bca){Type t=v.GetType();  //获取类型Console.WriteLine($"Object type:{t.Name}");FieldInfo[] fi=t.GetFields();  //获取字段信息foreach(var f in fi){Console.WriteLine($"       Field:{f.Name}");}Console.WriteLine();}}
}

基类和派生类对象以及它们的Type对象

还可以使用typeof运算符来获取Type对象。只需要提供类型名作为操作数,它就会返回Type
对象的引用,如下所示:

Tyep t=tyepof(DerivedClass);

下面的代码给出了一个使用typeof运算符的简单示例:

using System;
using System.Reflection;namespace SimpleReflection
{class BaseClass{public int BaseField;}class DerivedClass:BaseClass{pubic int DerivedField;}class Program{static void Main(){Type tbc=typeof(DerivedClass);Console.WriteLine($"Object type:{tbc.Name}");FieldInfo[] fi=tbc.GetFields();foreach(var f in fi)Console.WriteLine($"    Field:{f.Name}");}}
}
http://www.xdnf.cn/news/17704.html

相关文章:

  • Python 类元编程(元类基础知识)
  • 【Part 4 未来趋势与技术展望】第一节|技术上的抉择:三维实时渲染与VR全景视频的共生
  • Go语言实战案例:使用Gin处理路由参数和查询参数
  • Nginx 超详细详解和部署实例
  • 【Python】新手入门:什么是python运算符?python运算符有哪些种类?运算符优先级是怎么样的?
  • 顺序表 —— OJ题
  • HarmonyOS Navigation路由跳转的完整示例
  • 用了Cursor AI之后,我的编程效率翻倍了?——一位程序员的真实体验分享
  • 区块链技术原理(9)-什么是以太币
  • 飞算JavaAI云原生实践:基于Docker与K8s的自动化部署架构解析
  • redis 内存使用率高居高不下,如何分析 key占用情况
  • Eclipse RCP产品动态模块设计
  • [AI React Web]`意图识别`引擎 | `上下文选择算法` | `url内容抓取` | 截图捕获
  • C++主流string的使用
  • 海康视觉平台VM创建项目
  • [Oracle数据库] ORACLE的用户维护和权限操作
  • 猫头虎AI分享:Excel MCP,让AI具备操作Excel表格|创建销售数据表、复制工作表、填充数据、写公式、绘制图表、调节颜色、添加透视表、保存为PDF
  • el-select如何获取到filterable过滤后的数据;el-select全选与filterable过滤组合使用;
  • Python 中使用多进程编程的“三两”问题
  • Gradle(三)创建一个 SpringBoot 项目
  • vue修改element的css属性
  • 8.13打卡 DAY 41 简单CNN
  • Android实现Glide/Coil样式图/视频加载框架,Kotlin
  • 前后端分离项目在云服务器的部署
  • vscode远程服务器出现一直卡在正在打开远程和连接超时解决办法
  • 通过限制网络访问来降低服务器被攻击风险的方法
  • Python uv的使用和配置
  • 《深入解析C++中的Map容器:键值对存储的终极指南》
  • Tigshop 跨境多语言多货币 JAVA / PHP 版本重磅更新v5.0.0发布
  • 友思特方案 | FPGA 加持,友思特图像采集卡高速预处理助力视觉系统运行提速增效