news 2026/2/26 3:51:04

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/2/18 4:33:06

小红的矩阵【牛客tracker 每日一题】

小红的矩阵 时间限制&#xff1a;1秒 空间限制&#xff1a;256M 网页链接 牛客tracker 牛客tracker & 每日一题&#xff0c;完成每日打卡&#xff0c;即可获得牛币。获得相应数量的牛币&#xff0c;能在【牛币兑换中心】&#xff0c;换取相应奖品&#xff01;助力每日有…

作者头像 李华
网站建设 2026/2/25 10:19:45

负载均衡-LVS 全解析

负载均衡-LVS 全解析 LVS 介绍 Linux 虚拟服务器(LVS&#xff0c;Linux Virtual Servers) &#xff0c;使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展&#xff0c;而价格低廉的解决方案。 LVS是 章文嵩博士 于19…

作者头像 李华
网站建设 2026/2/23 22:11:50

如何获取免费优质大模型API?

引言 在AI技术高歌猛进的今天&#xff0c;一个有趣的悖论正在浮现&#xff1a;大模型的能力日益强大&#xff0c;但能享受到这种技术红利的企业却相对有限。深究其原因&#xff0c;无非是算力资源的分布不均&#xff1a;如同工业革命初期的蒸汽动力&#xff0c;先进技术被禁锢在…

作者头像 李华
网站建设 2026/2/24 23:30:53

如何快速检测DoublePulsar后门:终极网络安全防护指南

你是否担心自己的Windows系统被植入DoublePulsar后门&#xff1f;这个由NSA开发的恶意软件曾在2017年的"永恒之蓝"勒索软件攻击中肆虐全球。现在&#xff0c;有了doublepulsar-detection-script这个开源工具&#xff0c;你可以轻松检测并清除这个隐形威胁&#xff01…

作者头像 李华