C# 反射的终点:Type,MethodInfo,PropertyInfo,ParameterInfo,Summry
文章目录
- 前言
- 反射是什么?
- 常用类型操作
- Summry
- PropertyInfo
- MethodInfo
- 无参函数运行
- 有参函数运行,获取paramterInfo
- 总结
前言
我之前写了一篇Attribute特性的介绍,成功拿到了Attribute的属性,但是如果把Attribute玩的溜,那就要彻底了解反射。
C#高级语法 Attribute特性详解和类型,方法,变量附加特性讲解
反射是什么?
反射就是对一个类里面所有的元素的彻底描述。我们可以从特性看出C# 对基于反射的类型定义了。
【C#进阶】C# 特性

我们声明一个简单的类
namespace NETCore8.Models
{public class TestModel{public int Id { get; set; }private string name;public void Send(){}/// <summary>/// 发送测试/// </summary>/// <param name="name"></param>public void TestSend(string name){}public TestModel(){}}
}

常用类型操作
我们接下来的操作全部都是基于共有属性进行的操作
Summry
但是Summry不属于编译内容,属于注解,如果想要获取Summry信息,则需要安装一个Nuget:Namotion.Refelction



PropertyInfo
static void Main(string[] args){//声明一个简单的bindingFlagsBindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;TestModel model = new TestModel();model.Id = 5;var propertyInfo = model.GetType().GetProperty("Id");Console.WriteLine("属性名:"+ propertyInfo?.Name);Console.WriteLine("属性值:" + propertyInfo?.GetValue(model));Console.WriteLine("属性类型:" + propertyInfo?.PropertyType);propertyInfo.SetValue(model, 10);Console.WriteLine("修改后的属性值:" + propertyInfo.GetValue(model));//如果你安装了Namotion.Refelction,可以使用封装好的扩展方法Console.WriteLine("Namotion.Refelction:" + model.TryGetPropertyValue<int>("Id"));Console.WriteLine("Hello, World!");Console.ReadKey();}

MethodInfo
无参函数运行

static void Main(string[] args){TestModel model = new TestModel();var methodInfo = model.GetType().GetMethod("Send");if (methodInfo != null){Console.WriteLine($"方法名:{methodInfo.Name}");Console.WriteLine($"返回值:{methodInfo.ReturnType}");Console.WriteLine("运行方法");methodInfo.Invoke( model, null );}Console.WriteLine("Hello, World!");Console.ReadKey();}

有参函数运行,获取paramterInfo

internal class Program
{static void Main(string[] args){TestModel model = new TestModel();var methodInfo = model.GetType().GetMethod("TestSend");//如果你装了Namotion.Refelction,可以使用Xml方法获取注解if (methodInfo!= null ){Console.WriteLine($"方法名:{methodInfo.Name}");Console.WriteLine($"返回值:{methodInfo.ReturnType}");Console.WriteLine($"方法注解:{methodInfo.GetXmlDocsSummary()}");var parmeters = methodInfo.GetParameters();foreach (var item in parmeters){Console.WriteLine($"参数名:{item.Name}");Console.WriteLine($"参数类型:{item.ParameterType}");Console.WriteLine($"参数注解:{item.GetXmlDocs()}");}Console.WriteLine("运行方法,注意无法解决重载问题,因为重载的方法名相同,会直接抛出异常");Console.WriteLine("运行方法的参数类型和个数必须完全一致");methodInfo.Invoke(model, new object[] { "入参",1 });}Console.WriteLine("Hello, World!");Console.ReadKey();}
}

总结
我们将反射类型的常用内容已经讲解完了。接下来我们将主要讲解Attribute的详细运用。经过这么久的铺垫,我们终于可以开始正常的讲解了。
相关文章:
C# 反射的终点:Type,MethodInfo,PropertyInfo,ParameterInfo,Summry
文章目录 前言反射是什么?常用类型操作SummryPropertyInfoMethodInfo无参函数运行 有参函数运行,获取paramterInfo 总结 前言 我之前写了一篇Attribute特性的介绍,成功拿到了Attribute的属性,但是如果把Attribute玩的溜,那就要彻…...
2020年认证杯SPSSPRO杯数学建模D题(第一阶段)让电脑桌面飞起来全过程文档及程序
2020年认证杯SPSSPRO杯数学建模 D题 让电脑桌面飞起来 原题再现: 对于一些必须每天使用电脑工作的白领来说,电脑桌面有着非常特殊的意义,通常一些频繁使用或者比较重要的图标会一直保留在桌面上,但是随着时间的推移,…...
谷歌推出创新SynCLR技术:借助AI生成的数据实现高效图像建模,开启自我训练新纪元!
谷歌推出了一种创新性的合成图像框架,这一框架独特之处在于它完全不依赖真实数据。这个框架首先从合成的图像标题开始,然后基于这些标题生成相应的图像。接下来,通过对比学习的技术进行深度学习,从而训练出能够精准识别和理解这些…...
Vue2中使用echarts,并从后端获取数据同步
一、安装echarts npm install echarts -S 二、导入echarts 在script中导入,比如: import * as echarts from "echarts"; 三、查找要用的示例 比如柱状图 四、初始化并挂载 <template><div id"total-orders-chart" s…...
【Redux】自己动手实现redux-thunk
1. 前言 在原始的redux里面,action必须是plain object,且必须是同步。而我们经常使用到定时器,网络请求等异步操作,而redux-thunk就是为了解决异步动作的问题而出现的。 2. redux-thunk中间件实现源码 function createThunkMidd…...
ElasticSearch使用Grafana监控服务状态-Docker版
文章目录 版本信息构建docker-compose.yml参数说明 创建Prometheus配置文件启动验证配置Grafana导入监控模板模板说明 参考资料 版本信息 ElasticSearch:7.14.2 elasticsearch_exporter:1.7.0(latest) 下载地址:http…...
VS Code 如何调试Python文件
VS Code中有1,2,3处跟Run and Debug相关的按钮, 1 处:调试和运行就不多说了,Open Configurations就是打开workspace/.vscode下的lauch.json文件,而Add Configuration就是在lauch.json文件中添加当前运行Python文件的Configuratio…...
day06、SQL语言之概述
SQl 语言之概述 6.1 SQL语言概述6.2 SQL语言之DDL定义数据库6.3 SQL语言之DML操纵数据库 6.1 SQL语言概述 6.2 SQL语言之DDL定义数据库 6.3 SQL语言之DML操纵数据库...
3D目标检测(教程+代码)
随着计算机视觉技术的不断发展,3D目标检测成为了一个备受关注的研究领域。与传统的2D目标检测相比,3D目标检测可以在三维空间中对物体进行定位和识别,具有更高的准确性和适用性。本文将介绍3D目标检测的相关概念、方法和代码实现。 一、3D目…...
让设备更聪明 |启英泰伦离线自然说,开启智能语音交互新体验!
语音交互按部署方式可以分为两种:离线语音交互和在线语音交互。 在线语音交互是将数据储存在云端,其具备足够大的存储空间和算力,可以实现海量的语音数据处理。 离线语音交互是以语音芯片为载体,语音数据的采集、计算、决策均在…...
React Hooks之useState、useRef
文章目录 React Hooks之useStateReact HooksuseStatedemo:在函数式组件中使用 useState Hook 管理计数器demo:ant-design-pro 中EditableProTable组件使用 useRef React Hooks之useState React Hooks 在 React 16.8 版本中引入了 Hooks,它是…...
提供电商Api接口-100种接口,淘宝,1688,抖音商品详情数据安全,稳定,支持高并发
Java是一种高级编程语言,由Sun Microsystems公司于1995年推出,现在属于Oracle公司开发和维护。Java以平台无关性、面向对象、安全性、可移植性和高性能著称,广泛用于桌面应用程序、嵌入式系统、企业级服务、Android移动应用程序等。 接口是Ja…...
git的使用 笔记1
GIT git的使用 使用git提交的两步 第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。 .git 跟踪管理版本的目录 创建版本库…...
基于SpringBoot的医疗挂号管理系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的医疗挂号管理系统,java…...
prometheus与zabbix监控的对比介绍
一、普米与zabbix基本介绍 1、prometheus介绍 Prometheus的基本原理是Prometheus Server通过HTTP周期性抓取被监控组件的监控数据,任意组件只要提供对应的HTTP接口并且符合Prometheus定义的数据格式,就可以接入Prometheus监控。 工作流程大致分为收集数…...
详解全志R128 RTOS安全方案功能
介绍 R128 下安全方案的功能。安全完整的方案基于标准方案扩展,覆盖硬件安全、硬件加解密引擎、安全启动、安全系统、安全存储等方面。 配置文件相关 本文涉及到一些配置文件,在此进行说明。 env*.cfg配置文件路径: board/<chip>/&…...
【MySQL】WITH AS 用法以及 ROW_NUMBER 函数 和 自增ID 的巧用
力扣题 1、题目地址 601. 体育馆的人流量 2、模拟表 表:Stadium Column NameTypeidintvisit_datedatepeopleint visit_date 是该表中具有唯一值的列。每日人流量信息被记录在这三列信息中:序号 (id)、日期 (visit_date)、 人流量 (people)每天只有…...
基于SpringBoot的在线考试系统源码和论文
网络的广泛应用给生活带来了十分的便利。所以把在线考试管理与现在网络相结合,利用java技术建设在线考试系统,实现在线考试的信息化管理。则对于进一步提高在线考试管理发展,丰富在线考试管理经验能起到不少的促进作用。 在线考试系统能够通…...
基于Spring Boot的美妆分享系统:打造个性化推荐、互动社区与智能决策
基于Spring Boot的美妆分享系统:打造个性化推荐、互动社区与智能决策 1. 项目介绍2. 管理员功能2.1 美妆管理2.2 页面管理2.3 链接管理2.4 评论管理2.5 用户管理2.6 公告管理 3. 用户功能3.1 登录注册3.2 分享商品3.3 问答3.4 我的分享3.5 我的收藏夹 4. 创新点4.1 …...
Axure医疗-住院板块,住院患者原型预览,新增医护人员原型预览,新增病房原型预览,选择床位原型预览,主治医生原型预览,主治医生医嘱原型预览
目录 一.医疗项目原型图-----住院板块 1.1 住院板块原型预览 1.2 新增住院患者原型预览 1.3 新增医护人员原型预览 1.4 新增病房原型预览 1.5 选择床位原型预览 1.6 主治医生原型预览 1.7 主治医生医嘱原型预览 1.8 主治医生查看患者报告原型预览 1.9 护士原型预…...
保姆级教程:MogFace人脸检测模型-large快速上手,无需代码轻松体验
保姆级教程:MogFace人脸检测模型-large快速上手,无需代码轻松体验 1. 认识MogFace人脸检测模型 1.1 什么是MogFace MogFace是目前最先进的人脸检测方法之一,在Wider Face六项榜单上长期保持领先地位。这个模型通过三个创新点显著提升了检测…...
3秒获取全网歌词:163MusicLyrics让多平台歌词提取效率提升10倍
3秒获取全网歌词:163MusicLyrics让多平台歌词提取效率提升10倍 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 在数字音乐时代,歌词已成为音乐体验…...
Lobe Theme:为Stable Diffusion WebUI注入现代设计美学的终极界面解决方案
Lobe Theme:为Stable Diffusion WebUI注入现代设计美学的终极界面解决方案 【免费下载链接】sd-webui-lobe-theme 🤯 Lobe theme - The modern theme for stable diffusion webui, exquisite interface design, highly customizable UI, and efficiency …...
MCprep插件终极指南:从Minecraft世界到专业动画的完整解决方案
MCprep插件终极指南:从Minecraft世界到专业动画的完整解决方案 【免费下载链接】MCprep Blender python addon to increase workflow for creating minecraft renders and animations 项目地址: https://gitcode.com/gh_mirrors/mc/MCprep 你是否曾梦想将Min…...
3步玩转Balena Etcher:开源镜像烧录工具完全指南
3步玩转Balena Etcher:开源镜像烧录工具完全指南 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher Balena Etcher是一款开源跨平台镜像烧录工具&#x…...
D-Net:动态大内核与特征融合如何革新三维医学影像分割?
1. 为什么医学影像分割需要动态大内核? 医学影像分割就像给CT或MRI照片上的器官、肿瘤画精确边界线。传统方法像用固定倍数的放大镜观察——要么看不清细节(小内核),要么错过整体结构(大内核)。我在处理腹…...
人工智能毕业设计2026方向集合
0 选题推荐 - 人工智能篇 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际…...
如何高效使用抖音批量下载器:3分钟快速上手完整指南
如何高效使用抖音批量下载器:3分钟快速上手完整指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为手动保存抖音视频而烦恼吗?每次看到喜欢的合集都要一个个点击分享保存&…...
告别手动修改!用Env文件管理器一键配置Allegro SKILL加载路径(支持16.6/17.4)
告别手动修改!用Env文件管理器一键配置Allegro SKILL加载路径(支持16.6/17.4) 在PCB设计领域,Allegro作为行业标杆工具,其强大的可扩展性离不开SKILL脚本的支持。然而,随着项目复杂度提升,SKILL…...
OpenRGB:统一多品牌设备控制的开源RGB解决方案
OpenRGB:统一多品牌设备控制的开源RGB解决方案 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/OpenRGB. Releases can …...
