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

用《斗破苍穹》的视角打开C#3 标签与反射(人物创建与斗技使用)

请添加图片描述

  • 随着剧情的发展,主线人物登场得越来越多,时不时跳出一个大佬,对我张牙舞爪地攻击。
  • 眼花缭乱的斗技让我不厌其烦,一个不小心,我就记不清楚在哪里遇上过什么人,他会什么斗技了。
  • 这时候,我就特别希望有个办法,能把所有登场得人物都自动检测出来,到时候就可以直接调用了。
  • 比方说萧炎和云韵:
[Hero]
class 萧炎 {[Skill]public void 八极崩() { }[Skill]public void 焰分噬浪尺() { }[Skill]public void 佛怒火莲() { }
}
[Hero]
class 云韵
{[Skill]public void 风之极陨杀() { }[Skill]public void 风之极落日曜() { }[Skill]public void 风吹势() { }[Skill]public void 风灵分形剑() { }
}
  • 这里特意用标签标注了哪些是英雄,哪些是技能。
  • 接下来,只要识别这些标签,然后通过反射,就能在最需要的时候,让这些人物登场了。
    请添加图片描述
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace FrameworkDemo
{// 只写Hero也可以,但是规范地写法会加上"Attribute"。// 程序在识别时,会自动忽略"Attribute"。public class HeroAttribute : Attribute { }public class SkillAttribute : Attribute { }[Hero]class 萧炎 {[Skill]public void 八极崩() { }[Skill]public void 焰分噬浪尺() { }[Skill]public void 佛怒火莲() { }}[Hero]class 云韵{[Skill]public void 风之极陨杀() { }[Skill]public void 风之极落日曜() { }[Skill]public void 风吹势() { }[Skill]public void 风灵分形剑() { }}class Program{static private List<Type> heroTypes;                            // 所有英雄类型列表static private object selectedHero;                             // 当前选中的英雄对象static private ArrayList heroNamesList = new ArrayList();       // 所有英雄名称列表static private ArrayList selectedHeroSkill = new ArrayList();  // 当前选中英雄的技能列表static private void init() {heroTypes = System.Reflection.Assembly.GetExecutingAssembly().GetTypes()    // 正在运行的程序集中的类型.Where(t => t.GetCustomAttributes(typeof(HeroAttribute), false).Any())  // 找到所有带有英雄属性的对象,false表示不搜索继承链.ToList();            heroNamesList.AddRange(heroTypes.Select(t => t.Name).ToArray());            // 初始化英雄名称列表,type类型自带Name属性}static private void showHeros() {int count = 1;Console.WriteLine("当前已有英雄:");foreach (string name in heroNamesList){Console.WriteLine($"{count}:{name}");count++;}Console.WriteLine("====================");Console.WriteLine("请填写选取英雄的序号:");}static private Type selectHero() {int index = Convert.ToInt32(Console.ReadLine());if (index > heroTypes.Count || index <= 0) {Console.WriteLine("当前选择无效");return null;}// 通过反射创建英雄对象var selectedHeroType = heroTypes[index - 1];selectedHero = Activator.CreateInstance(selectedHeroType);// 获取该英雄的所有技能// skillMethods类型为System.Reflection.MethodInfo,自带Name属性var skillMethods = selectedHeroType.GetMethods().Where(m => m.GetCustomAttributes(typeof(SkillAttribute), false).Any()).ToList();// 初始化技能列表selectedHeroSkill.Clear();selectedHeroSkill.AddRange(skillMethods.Select(m => m.Name).ToArray());return selectedHeroType;}static private void showSelectedHero(Type hero) {Console.WriteLine("====================");int index = 1;Console.WriteLine("已选择英雄:");Console.WriteLine(hero.Name);Console.WriteLine("技能为:");foreach (string skill in selectedHeroSkill){Console.WriteLine($"{index}:{skill}");index++;}Console.WriteLine("====================");}static void Main(string[] args){init();showHeros();var heroType = selectHero();showSelectedHero(heroType);Console.ReadLine();}}
}
  • 于是乎,这个世界就变成了这样:
    请添加图片描述
    其实,还不错啦~~~
    请添加图片描述

相关文章:

用《斗破苍穹》的视角打开C#3 标签与反射(人物创建与斗技使用)

随着剧情的发展&#xff0c;主线人物登场得越来越多&#xff0c;时不时跳出一个大佬&#xff0c;对我张牙舞爪地攻击。眼花缭乱的斗技让我不厌其烦&#xff0c;一个不小心&#xff0c;我就记不清楚在哪里遇上过什么人&#xff0c;他会什么斗技了。这时候&#xff0c;我就特别希…...

c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))

上篇文章介绍了一些常用的字符串函数&#xff0c;大家可以跳转过去浏览一下&#xff1a;c语言进阶部分详解&#xff08;详细解析字符串常用函数&#xff0c;并进行模拟实现&#xff08;上&#xff09;&#xff09;_总之就是非常唔姆的博客-CSDN博客 今天接着来介绍一些&#x…...

一文看懂光模块的工作原理

你们好&#xff0c;我的网工朋友 光模块有很多类别&#xff0c;是我们经常要用到的PHY层器件。虽然封装&#xff0c;速率&#xff0c;传输距离有所不同&#xff0c;但是其内部组成基本是一致的。 以太网交换机常用的光模块有SFP&#xff0c;GBIC&#xff0c;XFP&#xff0c;X…...

基于SpringBoot的桂林旅游景点导游平台

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 景点类型管理 景点信息管理 线路推荐管理 用户注册 线路推荐 论坛交流 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实…...

【小程序 - 加强】自定义组件、使用npm包、全局数据共享、分包_05

目录 一、自定义组件 1. 组件的创建与引用 1.1 创建组件 1.2 引用组件 1.2.1 局部引用组件 1.2.2 全局引用组件 1.2.3 全局引用 VS 局部引用 1.2.4 组件和页面的区别 2. 样式 2.1 组件样式隔离 2.2 组件样式隔离的注意点 2.3 修改组件的样式隔离选项 2.4 styleIso…...

Vue.js3学习篇--Vue模板应用

目录 一,模板基础 1.模板插值 &#xff08;1&#xff09;基础插值 &#xff08;2&#xff09;HTML代码插值 &#xff08;3&#xff09;标签属性插值 2.模板指令 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;指令参数 二.条件渲染 1.使用v-if指令渲染 2.使…...

【软考】5.2 传输介质/通信方式/IP地址/子网划分

《传输介质》 双绞线&#xff1a;网线&#xff1b;传输距离在100m以内 无屏蔽双绞线&#xff1a;UTP&#xff1b;可靠性相对较低屏蔽双绞线&#xff1a;STP&#xff1b;屏蔽怕干扰&#xff1b;可靠性相对较高&#xff1b;一般用于对传输可靠性要求很高的场合 网线&#xff1a…...

软件测试银行项目网上支付接口调用测试实例

公司最近有一个网站商城项目要开始开发了&#xff0c;这几天老板和几个同事一起开着需求会议&#xff0c; 讨论了接下来的业务规划和需求策略&#xff0c;等技术需求一下来还要讨论技术需求&#xff0c; 确认后再慢慢的进入开发阶段&#xff0c;趁着闲暇时间新造的人想总结一…...

w806 adc 中断扫描通道采集

用到了该芯片adc 扫描4个adc 通道&#xff0c;官方的死循环等待非常浪费时间&#xff0c;这里改用adc 中断采集方式&#xff0c;记录一下 int32_t adcFilterSum[4]{0}; int32_t detec_adc_value[4]{0};//mV int16_t detec_convt_ok[4]{0};/*is OK*/ ADC_HandleTypeDef hadc;vo…...

使用CSS的Positions布局打造响应式网页

在当今移动互联网的时代&#xff0c;响应式网页设计已经成为了一个必备的技能。通过使用CSS Positions布局&#xff0c;我们可以轻松地实现一个响应式的网页&#xff0c;使网页能够在不同的屏幕尺寸下自动适应。本文将介绍如何使用CSS Positions布局来打造一个响应式网页&#…...

模型训练环境相关(CUDA、PyTorch)

模型训练环境相关&#xff08;CUDA、PyTorch&#xff09; 1. 查看当前 GPU 所能支持的最高版本的 CUDA2. 如何判断是否安装了 CUDA3. 安装 PyTorch3.1 创建虚拟环境3.2 激活并进入虚拟环境3.3 安装 PyTorch 1. 查看当前 GPU 所能支持的最高版本的 CUDA 打开 NVIDIA 控制面板&a…...

链动2+1模式:社交电商行业的新型商业模式与营销手段

链动21模式是近年来在社交电商行业中崭露头角的一种新型商业模式和营销手段。在经历了多年的发展之后&#xff0c;社交电商行业已经进入了一个竞争激烈、用户获取成本高昂的阶段。在这个阶段&#xff0c;如何迅速吸引用户并增加他们的留存率和复购率成为了亟待解决的问题。 为了…...

竞赛选题 深度学习 opencv python 实现中国交通标志识别

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…...

LuatOS-SOC接口文档(air780E)-- fskv - kv数据库,掉电不丢数据

示例 -- 本库的目标是替代fdb库 -- 1. 兼容fdb的函数 -- 2. 使用fdb的flash空间,启用时也会替代fdb库 -- 3. 功能上与EEPROM是类似的 fskv.init() fskv.set("wendal", 1234) log.info("fskv", "wendal", fskv.get("wendal"))--[[ fs…...

一篇文章教你Pytest快速入门和基础讲解,一定要看!

前言 目前有两种纯测试的测试框架&#xff0c;pytest和unittestunittest应该是广为人知&#xff0c;而且也是老框架了&#xff0c;很多人都用来做自动化&#xff0c;无论是UI还是接口pytest是基于unittest开发的另一款更高级更好用的单元测试框架出去面试也好&#xff0c;跟别…...

SpringBoot项目:Cannot find declaration to go to

SpringBoot项目get,set方法总报Cannot find declaration to go to 搜了很多答案&#xff0c;没解决 后来仔细一想&#xff0c;原来是我的idea软件重装了&#xff0c;lombok插件没重新安装导致。 安装步骤&#xff1a; 1、下载地址&#xff1a;https://plugins.jetbrains.com…...

【高并发】多线程和高并发提纲

文章目录 三大源头两个主要问题三大解决方案 最近正在面试&#xff0c;对多线程和高并发相关问题整理了一个简单的提纲。 个人感觉这三大部分由底向上&#xff0c;足够引出对并发编程中大部分问题的讨论~ 三大源头 线程切换带来的原子性问题。 原子操作&#xff1a;利用CPU提…...

vue.js处理数组对象中某个字段是否变为两个字段

一、场景&#xff1a; 产品要求做一个时间步骤条&#xff0c;使用目前后端已返回的数据进行操作实现。时间步骤条要求日期和时间分开显示且相同日期只显示第一个日期。 图左边为实现效果&#xff0c;右边为后台返回的接口。接口中current字段表示当前到达第几步&#xff0c;从…...

从零开始的C++(补充三的内容)

auto:在编译阶段根据数据的类型确认auto所代表的类型&#xff0c;并将auto换成对应的类型。 特点&#xff1a; 1、auto所能代表的类型必须是在编译阶段就能确认的。 2、auto修饰的变量必须初始化&#xff0c;否则编译器无法判断auto的实际类型。 3、auto会根据第一个数据来…...

微信小程序通过createSelectorQuery获取元素 高度,宽度与界面距离

小程序官方有提供给我们一个 const query wx.createSelectorQuery() 函数 我们可以先编写这样一段代码 wxml <view><button bindtap"getDom">点击查看</button><view class "textIn" style "height: 100px;width: 30px;&quo…...

MySQL-事务

MySQL-事务 1.什么是事务 举例&#xff1a;想象炒菜的过程。 洗菜切菜炒菜装盘 我相信缺少任何任何一个步骤&#xff0c;都不完美&#xff01;&#xff01;&#xff01;可以将炒菜的过程理解为一个事务&#xff0c;是一组操作的集合&#xff0c;而MySQL中的事务也是如此。但…...

自动定时删除磁盘文件的脚本(从文件日期最早的开始删)

#!/bin/bash# 指定的挂载点 MOUNTPOINT"/media/vm/MyDisk512GB"# 设置磁盘大小的限制 (例如&#xff1a;800G) LIMIT$((800 * 1024 * 1024)) # 单位是KB# 获取挂载点的已使用空间 USED_SPACE$(df -kP "$MOUNTPOINT" | tail -1 | awk {print $3})echo &quo…...

拆解CPU的基本结构和运行原理

CPU的基本结构 CPU是一个计算系统的核心 南北桥芯片将CPU与外设连接起来 CPU执行流程 CPU的电路基础 组合电路基本原理 时序电路基本原理 多核成为主流 汇编语言和寄存器 中断的基本原理 中断的产生 中断服务程序 CPU 做为计算机的总司令官&#xff0c;它管理着计算…...

Docker安装——Ubuntu (Jammy 22.04)

一、为什么要用 Ubuntu&#xff1f;(centos和ubuntu有什么区别&#xff09; 使用lsb_release命令&#xff1a;lsb_release -a &#xff0c;即可查看ubantu的版本&#xff0c;但是为什么要使用ubantu 呢&#xff1f; 区别&#xff1a;1、centos基于EHEL开发&#xff0c;而ubunt…...

Fast DDS之Transport

目录 transport层负责为DDS用户数据收发和服务发现提供通信。包含UDP&#xff0c;TCP&#xff0c;SHM。...

爱普生L125X_L325X系列打印机Wi-Fi配置方法(Smart Panel)

准备工作&#xff1a; 手机需要下载“Epson Smart Panel”APP&#xff1b; 配置无线&#xff08;Wi-Fi&#xff09;方法 说明&#xff1a;SSID名称&#xff08;Wi-Fi名&#xff09;不能包含中文字符,路由器需要选择2.4GHz频段; 1. 打开“Epson Smart Panel”软件&#xff0…...

【回顾一下Docker的基本用法】

文章目录 回顾一下Docker的基本用法1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结 1.2.Docker和虚拟机的区别1.3.Docker架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker架构1.3.4.小结 1.4.…...

【Python】Python基础知识

【Python】Python基础知识 关键字 查看Python关键字&#xff1a; >python >>>import keyword >>>keyword.kwlist 注释 注释有两方面作用&#xff1a; &#xff08;1&#xff09;提高程序的可读性&#xff08;最重要的作用&#xff09;&#xff1b…...

【计算机视觉 05】YOLO论文讲解:V1-V7

https://ai.deepshare.net/live_pc/l_63243a65e4b050af23b79338 Part1.目标检测与YOLO系列 1. 目标检测任务及发展脉络 2. YOLO的发展史 Anchors Base原理&#xff1a; Part2.YOLOV1-V3 3. YOLO V1的网络结构 4. YOLO V3的网络结构与实验结果 Part3.YOLO的进化 5. YOLO V4的网络…...

git全局与单仓库的密码管理

概要 在使用git时&#xff0c;有默认的全局配置&#xff0c;每个仓库也有自己的配置&#xff0c;在使用时常常傻傻分不清楚&#xff0c;现在进行一个简单的整理记录。 一般情况下全局配置中的git账号和邮箱通常设置成自己的&#xff0c;其他仓库再根据项目需要进行单独配置&a…...

IDEA的使用(一) (IntelliJ IDEA 2022.1.3版本)

目录 1. IDEA项目结构 2. 模块的导入操作 2.1 正规操作 2.2 取巧操作 2.3 出现乱码 2.4 模块改名 3. 代码模板的使用 后缀补全&#xff08;Postfix Completion&#xff09;、实时模板&#xff08;Live Templates&#xff09;菜单里面什么介绍都有&#xff0c;可以自学&a…...

javaee SpringMVC文件上传 项目结构

引入依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…...

JavaScript DOM 函数大全详解(使用最新的 JS 语法)

JavaScript DOM 函数大全详解&#xff08;使用最新的 JS 语法&#xff09; JavaScript 的 Document Object Model&#xff08;DOM&#xff09;是用于操作网页内容的编程接口。在最新的 JavaScript 语法下&#xff0c;我们有很多方便和高效的方法来处理 DOM。下面是一些常用 DO…...

Stm32_标准库_8_ADC_光敏传感器_测量具体光照强度

ADC简介 测量方式 采用二分法比较数据 IO通道 ADC基本结构及配置路线 获取数字变量需要用到用到光敏电阻的AO口&#xff0c;AO端口接在PA0引脚即可 测得的模拟数据与实际光照强度之间的关系为 光照强度 100 - 模拟量 / 40;代码&#xff1a; 完整朴素代码&#xff1a; #in…...

基于SSM的固定资产管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

Leetcode---364场周赛

题目列表 2864. 最大二进制奇数 2865. 美丽塔 I 2866. 美丽塔 II 2867. 统计树中的合法路径数目 一、最大二进制奇数 这题只要你对二进制有了解(学编程的不会不了解二进制吧)&#xff0c;应该问题不大&#xff0c;这题要求最大奇数&#xff0c;1.奇数&#xff1a;只要保证…...

使用 Powershell 检索不理解的命令

使用 Powershell 检索不理解的命令 尝试使用 Powershell 完成 Powershell 的命令行 使用 Powershell 时&#xff0c;有时您会忘记某个 cmdlet 或想要了解哪些 cmdlet 可用。在这种情况下&#xff0c;最好在互联网上查找&#xff0c;但您也可以使用 Powershell 函数来完成。 以…...

基于 FPGA 的机器博弈五子棋游戏

基于 FPGA 的机器博弈五子棋游戏 一,设计目的 五子棋是一种深受大众喜爱的游戏,其规则简单,变化多端,非常富有趣味性 和消遣性。棋类游戏在具备娱乐性、益智性的同时也因为其载体大多是手机, 电脑等移动互联网设备导致现代社会低头族等现象更加严重,危害青少年的身 体健康…...

uCOSIII实时操作系统 三 移植

目录 uCOSIII简介&#xff1a; 准备工作&#xff1a; 准备基础工程&#xff1a; UCOSIII工程源码&#xff1a; UCOSIII移植&#xff1a; 向基础工程中添加相应的文件夹 向工程中添加分组 常见问题&#xff1a; 下载验证&#xff1a; uCOSIII简介&#xff1a; UCOS-I…...

机器学习之SGD, Batch, and Mini Batch的简单介绍

文章目录 总述SGD(Stochastic Gradient Descent)(随机梯度下降&#xff09;Batch &#xff08;批量&#xff09;mini Batch (迷你批量&#xff09; 总述 SGD, Batch, and Mini Batch是可用于神经网络的监督学习计算权重更新的方案&#xff0c;即∆wij。 SGD(Stochastic Gradi…...

Windows电脑上的多开器与分布式存储系统的关系

Windows电脑上的多开器和分布式存储系统是两个不同的概念&#xff0c;二者之间没有直接的关系。 多开器是一种软件&#xff0c;它可以在Windows电脑上让用户同时运行多个同一应用程序的实例。多开器通常用于游戏玩家和应用程序测试人员等需要同时运行多个实例的用户。 分布式…...

积分球可以用于什么光谱光学检测

积分球是光测量的主要工具之一。积分球可以同时捕获一个光源发出的所有辐射。 1.光源测量 积分球可以用于测量光源的光通量、色温、光效等参数。通过将光源放置在积分球的入口处&#xff0c;球内的光线经过多次反射后形成均匀的照度分布&#xff0c;然后使用光度计或光谱仪对光…...

【力扣面试题】URL化

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析1、使用String内部方法2、使用StringBuilder 一、题目描述 题目链接&#xff1a;URL化 编写一种…...

计算机网络基础(二):物理层、数据链路层及网络层

一、物理层 1.物理层 物理层面的通信标准可以概括划分为与网络基础设施有关的标准和与被传输物理信号有关的标准两类。 网络基础设施的标准&#xff1a;鉴于物理层面的消息互通也是物理层应该兑现的服务&#xff0c;因此物理层的标准还会包括针脚的用途、线缆的材料与设计等…...

小白自学—网络安全(黑客技术)笔记

目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类…...

2.2.3 vim操作合集

1 vim VIM 是 Linux 系统上一款文本编辑器,学习 VIM 最好的文档,应该是阅读学习 VIM 的帮助文档,可以使用本地的帮助文件(vim--->:help),或者使用在线帮助文档。同时针对vim的使用,相应的相书籍也很多,如下 2 vim操作模式 命令模式:默认模式,该模式下可以移动光标…...

解决 Jenkins 性能缓慢的问题~转

解决 Jenkins 性能缓慢的问题 Docker中文社区 ​​ 计算机技术与软件专业技术资格持证人 2 人赞同了该文章 没有什么比缓慢的持续集成系统更令人沮丧的了。它减慢了反馈循环并阻止代码快速投入生产。虽然像使用性能更好的服务器可以为您争取时间&#xff0c;但您最终必须投资…...

Matrix卡顿优化之IdleHandlerLagTracer源码分析

前言 IdleHandler是Android系统为开发者提供的一种在消息队列空闲时运行任务的机制&#xff0c;通过IdleHandler执行的任务优先级低于主线程优先级&#xff0c;会在主线程任务执行完成后再执行&#xff0c;所以适用于一些实时性要求不高的任务&#xff0c;通常用于Android启动…...

(ubuntu)Docker 安装linux 详情过程

文章目录 前言Docker 安装linux第一步&#xff1a;使用dokcker 拉取镜像&#xff1a;第二步&#xff1a;创建本地目录&#xff08;用于挂载&#xff09;第三步&#xff1a;&#xff08;上传配置文件&#xff09;修改配置文件第四步&#xff1a;创建docker容器第五步: 测试本地连…...

ArcMap:第二届全国大学生GIS技能大赛(广西师范学院)详解-上午题

目录 01 题目 1.1 第一小题 1.2 第二小题 1.3 第三小题 1.4 数据展示 02 思路和实操 2.1 第一问思路 2.2 第一问操作过程 2.2.1 地理配准 2.2.2 镶嵌 2.2.2.1 第一种镶嵌方法 2.2.2.2 第二种镶嵌方法 2.2.3 裁剪 2.2.4 DEM信息提取 2.2.5 分类 2.3 第二问思路 …...