news 2026/4/15 13:17:48

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/4/14 22:48:02

算法竞赛备考冲刺必刷题(C++) | 洛谷 P1250 种树

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来&#xff0c;并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构&#xff0c;旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…

作者头像 李华
网站建设 2026/4/15 13:14:18

LeetCode 447 - 回旋镖的数量

文章目录摘要描述题解答案题解代码分析题解代码分析&#xff08;深入讲讲思路&#xff09;为什么使用平方距离&#xff1f;为什么需要用字典统计&#xff1f;为什么是 count * (count - 1)&#xff1f;示例测试及结果示例 1示例 2示例 3时间复杂度O(n)空间复杂度O(n)总结摘要 …

作者头像 李华
网站建设 2026/4/9 6:24:26

【量子安全时代已来】:MCP SC-400必须掌握的6项核心技能

第一章&#xff1a;量子安全时代下MCP SC-400的使命与定位 随着量子计算技术的突破性进展&#xff0c;传统公钥加密体系面临前所未有的破解风险。在这一背景下&#xff0c;MCP SC-400作为新一代抗量子密码模块&#xff0c;承担起保障关键基础设施通信安全的核心职责。其设计目标…

作者头像 李华
网站建设 2026/4/13 10:48:02

前端岗来了个男生,没两天就被劝退了

招了一个前端岗男生才两天就被劝退了上周团队入职一位前端新人&#xff0c;简历项目丰富&#xff0c;Vue / React/ Vite 样样都会。可一上手真实需求&#xff0c;问题比控制台报错还密集 以下是几个典型沟通还原&#xff0c;建议每位前端都看看怎么“答在点上”。&#x1f3af;…

作者头像 李华