news 2026/9/5 3:23:24

C#中记录一下使用字符串文本调用泛型方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#中记录一下使用字符串文本调用泛型方法

C#是静态类型语言,泛型参数在编译时必须确定,不能直接使用一个字符串来指定泛型参数,可以通过反射或者缓存打开窗口的委托来调用泛型方法。​​​​​​​​​​​​​​​​​​​​​​​​​​​​

准备:

准备几个测试供后续使用,代码如下:

public class Animal { public virtual void Print() { } } public class Dog : Animal { public override void Print() { Debug.Log("这是一只狗"); } } public class Duck : Animal { public override void Print() { Debug.Log("这是一只鸭子"); } } public class Test : MonoBehaviour { void Start() { } public void SummonAnimal<T>() where T : Animal,new() { T animal = new T(); animal.Print(); } }

方案一:

代码如下:

public void CallAnimalByName(string animalClassName) { // 获取程序集中的类型 var type = Assembly.GetExecutingAssembly() .GetTypes() .FirstOrDefault(t => t.Name == animalClassName && t.IsSubclassOf(typeof(Animal))); if (type != null) { // 通过反射调用泛型方法 var method = typeof(Test).GetMethod("SummonAnimal"); var genericMethod = method.MakeGenericMethod(type); genericMethod.Invoke(this, null); } }

在Test的Start方法中调用

void Start() { CallAnimalByName("Dog"); }

结果:

方案二:

代码如下:

private Dictionary<string, Action> animalActions = new Dictionary<string, Action>(); // 注册窗口类型 public void RegisterWindow<T>() where T : Animal, new() { string animalName = typeof(T).Name; animalActions[animalName] = () => SummonAnimal<T>(); } // 通过配置调用 public void CallAnimalByName2(string animalName) { if (animalActions.TryGetValue(animalName, out Action action)) { action(); } }

在Test的Start方法中调用:

void Start() { RegisterWindow<Duck>(); CallAnimalByName2("Duck"); }

结果:​​​​​​​

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 1:09:53

V型翅片与六边形蜂窝翅片的散热性能差异

&#x1f393;作者简介&#xff1a;科技自媒体优质创作者 &#x1f310;个人主页&#xff1a;莱歌数字-CSDN博客 &#x1f48c;公众号&#xff1a;莱歌数字 &#x1f4f1;个人微信&#xff1a;yanshanYH 211、985硕士&#xff0c;职场15年 从事结构设计、热设计、售前、产品设…

作者头像 李华
网站建设 2026/9/4 23:54:52

以太网温湿度传感器五重告警方式如何协同工作?

五重告警机制在以太网温湿度传感器中并非孤立运行&#xff0c;而是通过分层响应、多端触达、智能联动的方式协同工作&#xff0c;形成一套高效、可靠、全覆盖的环境风险预警体系。以下是其具体协同逻辑&#xff1a;1. 本地声光报警 —— 第一时间现场警示当温湿度超出设定阈值或…

作者头像 李华
网站建设 2026/9/4 5:16:06

COMSOL介电金属多层膜结构宽谱吸收器:文献复现与吸收特性研究

COMSOL介电金属多层膜结构宽谱吸收器。 该模型为文献复现&#xff0c;研究宽谱和窄谱吸收最近在研究COMSOL介电金属多层膜结构宽谱吸收器&#xff0c;这可是个很有意思的课题。先来说说这个模型&#xff0c;它是基于文献复现的&#xff0c;主要目的是研究宽谱和窄谱吸收情况。 …

作者头像 李华
网站建设 2026/9/4 16:34:49

使用DeepSeek开发第一个RAG

学习目标&#xff1a; 了解DeepSeek API开发平台&#xff0c;学习如何使用API开发应用。搞懂什么是向量数据库&#xff0c;为什么RAG需要它。掌握RAG&#xff08;检索增强生成&#xff09;的基本原理和关键技术要点。最后&#xff0c;实现一个基于DeepSeek和RAG搭建的智能问答…

作者头像 李华