C#中类的反射以及调用小妙招

C#中类的反射以及调用小妙招

  • 介绍
  • 原始代码
  • 类的反射
  • 修改之后的代码
  • 总结

介绍

最近看到原来同事写的代码感叹了一下,优化这个东西确实是永无止境的,其实就是不了解类的反射和返回值的使用。

原始代码

public void OnExit(Frame f, QFSMAnimatorEnum state, PlayerFSMRef playerFSMRef)
{switch (status){case QFSMAnimatorEnum.None:break;case QFSMAnimatorEnum.Idle:QFSMAnimatorStateIdle.OnExit(f, playerFSMRef);break;case QFSMAnimatorEnum.Run:QFSMAnimatorStateRun.OnExit(f, playerFSMRef);break;case QFSMAnimatorEnum.HasFrisbeeIdle:QFSMAnimatorStateHasFrisbeeIdle.OnExit(f, playerFSMRef);break;case QFSMAnimatorEnum.HasFrisbeeRun:QFSMAnimatorStateHasFrisbeeRun.OnExit(f, playerFSMRef);break;case QFSMAnimatorEnum.ReceivingFrisbee:QFSMAnimatorStateReceivingFrisbee.OnExit(f, playerFSMRef);break;case QFSMAnimatorEnum.ThrowingFrisbeeL:QFSMAnimatorStateThrowingFrisbeeL.OnExit(f, playerFSMRef);break;case QFSMAnimatorEnum.ThrowingFrisbeeR:QFSMAnimatorStateThrowingFrisbeeR.OnExit(f, playerFSMRef);break;case QFSMAnimatorEnum.ThrowingFrisbeeH:QFSMAnimatorStateThrowingFrisbeeH.OnExit(f, playerFSMRef);break;default:break;            }
}

当你看到上面的代码的时候你发现重复性质的调用太多了,写起来会非常累

类的反射

	Type stateType = Type.GetType($"Namespace.QFSMAnimatorState{status}");if (stateType != null){MethodInfo onExitMethod = stateType.GetMethod("OnExit");onExitMethod?.Invoke(null, new object[] { f, playerFSMRef });}

注意:使用这个反射时 Type.GetType($“Namespace.XXXXClass”)要加上类的命名空间和类名称
GetMethod(“xxx”)可以获取反射的类的方法
?.Invoke()方法是有一个object类型的返回值,就是对应方法的返回值(需要自己拆箱处理转成原返回值类型)

修改之后的代码

public void OnExit(Frame f, QFSMAnimatorEnum state, PlayerFSMRef playerFSMRef)
{switch (status){case QFSMAnimatorEnum.None:break;default:Type stateType = Type.GetType($"Namespace.QFSMAnimatorState{status}");if (stateType != null){MethodInfo onExitMethod = stateType.GetMethod("OnExit");onExitMethod?.Invoke(null, new object[] { f, playerFSMRef });}break;}
}

上述的代码是优化之后的代码,这里其实就是用到了一个反射并且调用了反射类的方法

总结

优化永无止境。感谢大家的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stthjpv:一款针对JWT Payload的安全保护工具

关于stthjpv stthjpv是一款针对JWT Payload的安全保护工具,这款工具集多种技术和思想于一身,可以通过不断改变相关参数值来防止Payload被解码,以帮助广大研究人员更好地保护JWT Payload的安全性。 除此之外,该工具还能够确保JWT …

如何定制化 ListView 界面

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

代码查重软件-自力更生

为了减轻工作量,自研了简单实用的代码查重工具,可以对若干文件之间进行查重。通过调试,相似度大于80%的没有一个是冤枉的。好用。去掉雷同的,其他的代码再慢慢看。

Python中的除法操作详解

在Python编程中,除法是一个基础但极其重要的算术操作。Python提供了多种除法运算方式,以适应不同的计算需求。以下是对Python中除法操作的全面介绍,包括示例代码。 1. 普通除法 / 普通除法使用/运算符,它返回一个浮点数结果&…

Java UU跑腿同城跑腿小程序源码快递代取帮买帮送源码小程序+H5+公众号跑腿系统

🚀【同城生活小助手】🚀 🏃‍♂️【同城跑腿,即刻送达的便利生活】🏃‍♀️ 在快节奏的都市生活中,时间成了最宝贵的资源。UU跑腿小程序,作为同城生活的得力助手,让你轻松解决生活…

​如何部署私有化地图服务器(Windows版)

用户希望我们能详细讲讲,如何通过《水经注地图服务》进行私有化部署做一个地图服务器。 现在就来为大家作一个较为详细的分享,希望能在私有化部署地图服务器的工作中,助你一臂之力! 《水经注地图服务》下载与安装 打开以下官方…

Embedded Coder代码生成优化

Embedded Coder为 MATLAB Coder 产品扩展了可用于嵌入式软件开发的功能。您可以生成具有专业人工代码的清晰度和效率的代码。例如,您可以: 生成紧凑、快速的代码,这对实时仿真器、目标系统快速原型构建板、大规模生产中使用的微处理器以及嵌…

从深度学习到音乐创作:AI如何重新定义音乐行业

📑引言 近一个月来,随着几款音乐大模型的轮番上线,AI在音乐产业的角色迅速扩大。这些模型不仅将音乐创作的门槛降至前所未有的低点,还引发了一场关于AI是否会彻底颠覆音乐行业的激烈讨论。从初期的兴奋到现在的理性审视&#xff0…

IO模型与多路复用

前言 在Linux中有一句经典台词:“Linux一切皆文件”。IO操作是与文件进行交流的唯一方式,也就是说这是与Linux系统交流的唯一手段。就如同人与人之间的交流,如果我们连交流的方式都不甚了解,交流的效率就会变得低下。操作系统也是…

机械设备制造企业MES系统解决方案介绍

机械设备制造行业涵盖了各类工业设备、工程机械、农业机械等多个领域,对生产精度、质量控制和效率提出了较高要求。为了提升生产效率、保证产品质量并满足客户需求,越来越多的机械设备制造企业引入了MES系统。本文将详细介绍MES系统在机械设备制造行业的…

CPPTest设计分析

目录 1 概述2 设计3 扩展Output3.1 扩展实例 1 概述 CppTest是一个可移植、功能强大但简单的单元测试框架,用于处理C中的自动化测试。重点在于可用性和可扩展性。支持多种输出格式,并且可以轻松添加新的输出格式。 CppTest下载地址Sourceforge Github地…

Java StringBuffer类和StringBuilder类

在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。 StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 St…

IO优化 C++ IO使用优化技巧

在编程中,输入/输出(I/O)操作通常是影响程序性能的主要瓶颈之一。 优化 I/O 操作可以显著提高程序的效率, 特别是在处理大量数据或需要频繁进行 I/O 操作的应用中。 以下是一些常见的 I/O 优化技巧: 1. 缓冲 I/O …

DataWhale-吃瓜教程学习笔记 (六)

学习视频**:第4章-决策树_哔哩哔哩_bilibili 西瓜书对应章节: 第五章 5.1;5.2;5.3 文章目录 MP 神经元- 感知机模型 (分类模型)-- 损失函数定义--- 感知机学习算法 - 随机梯度下降法 - 神经网络需要解决的问…

WPF引入控件模板

控件模板基础 需求 需求&#xff1a;客户对目前的控件样式不满意&#xff0c;需要修改样式。 每一个控件都有Template属性&#xff0c;可以定制样式。 我下面以Button为例子&#xff1a; <Button Content"Button" Height"30" Width"100"…

docker mysql cpu100% cpu打满排查 mysql cpu爆了 mysql cpu 100%问题排查

1. docker 启动了一个mysql 实例&#xff0c;近期忽然发现cpu100% 如下图所示 命令&#xff1a; top 2.进入容器内排查&#xff1a; docker exec mysql&#xff08;此处可以是docker ps -a 查找出来的image_id&#xff09; -it /bin/bash cd /var/log cat mysqld.log 容器内m…

2024年Stable Diffusion下载+安装+使用教程(超详细版本)收藏这一篇就够了!

本篇咱们要聊的是如何用“整合包”来搞定StabIe Diffusion WebUI的本地安装和使用&#xff0c;别担心&#xff0c;你不需要成为计算机大神&#xff0c;新手也能轻松上手。不过得提醒一下&#xff0c;你的硬盘得留出100G~200G的空间来&#xff0c;才能玩得转。 整合包放这里&am…

网站被浏览器提示“不安全”的解决办法

在互联网时代&#xff0c;网站的安全性直接关系到用户体验和品牌形象。当用户访问网站时&#xff0c;如果浏览器出现“您与此网站之间建立的连接不安全”的警告&#xff0c;这不仅会吓跑潜在客户&#xff0c;还可能对网站的SEO排名造成等负面影响。 浏览器发出的“不安全”警告…

MetaGPT-DataInterpreter源码解读

MetaGPT-DataInterpreter源码解读 MetaGPT 是一种多智能体框架&#xff0c;其利用SOP&#xff08;Standard Operating Procedures&#xff09;来协调多智能体系统。即&#xff1a;多智能体智能体环境标准流程&#xff08;SOP&#xff09;通信经济 DataInterpreter &#xff1a;…

无人机基础知识(模式篇)

姿态模式&#xff1a;姿态模式通常是在GPS模式无法使用的情况下进行操作的模式。通过操作杆对无人机进行操控&#xff0c;姿态模式下无人机只能提供自稳&#xff0c;不提供定点悬停&#xff0c;受外界影响很大&#xff1b; GPS模式&#xff1a;GPS模式通俗一点就是依靠GPS将无…