首页 > 其他分享 >如何用反射调用泛型类的方法

如何用反射调用泛型类的方法

时间:2024-10-24 17:31:56浏览次数:1  
标签:反射 调用 specificGenericType object typeof 泛型 Type

例子一:泛型类不含构造函数

using System;
using System.Reflection;

namespace 使用反射调用泛型类的方法
{
    class Program
    {
        static void Main(string[] args)
        {
            //定义要使用的类型参数(就是调用方法时要传入的参数类型,例如int)
            Type genericTypeArgument = typeof(int);

            //获取泛型类的定义
            Type generciClassType = typeof(GenericClass<>);

            //创建具体的泛型类型
            Type specificGenericType = generciClassType.MakeGenericType(genericTypeArgument);

            //使用反射创建泛型类的实例
            object instance = Activator.CreateInstance(specificGenericType);

            //获取方法信息
            MethodInfo methodInfo = specificGenericType.GetMethod("DoSomething");

            //准备方法参数
            object[] parameters = new object[] { 42 };

            //调用方法
            methodInfo.Invoke(instance, parameters);
            Console.ReadKey();
        }
    }

    public class GenericClass<T>
    {
        public void DoSomething(T value)
        {
            Console.WriteLine($"Do something with {value} of type {typeof(T)}");
        }
    }
}

测试结果如下:

 

标签:反射,调用,specificGenericType,object,typeof,泛型,Type
From: https://www.cnblogs.com/keeplearningandsharing/p/18500030

相关文章

  • Python 文件与模块的运行顺序及调用时的执行流程详解【大白话版本!!】
    Python文件与模块的运行顺序及调用执行流程详解引言ython是一种强大的编程语言,具有极大的灵活性和简洁性。无论是在开发小型脚本,还是构建复杂的应用程序时,理解Python文件的运行顺序以及模块调用时的执行流程都至关重要。尤其当你开发大规模项目,涉及到多个模块(文件)之间......
  • chrome 控制台console 调用vue页面的方法--来自chatgpt的回答
    问题二:vue2的项目中chrome控制台输入$0.vue会输出什么在Vue2项目中,如果你在Chrome控制台中输入$0.__vue__,这个命令会返回$0当前选中的DOM元素对应的Vue实例。解释:$0:代表ChromeDevTools中当前选中的DOM元素。.vue:这是Vue2中的一个内部属性,它持有与该D......
  • 改变函数调用上下文:apply与call方法详解及实例
    目录改变函数调用上下文:apply与call方法详解及实例一、什么是apply方法?1、apply语法2、apply示例二、什么是call方法?1、call语法 2、call示例三、apply和call的共同与差异1、apply和call的共同点2、apply和call的差异四、apply和call的其他实......
  • Java中的反射(1)——Class类、访问字段、调用方法
            Java中的反射机制是一种强大的工具,它允许程序在运行时动态地检查类的结构、修改对象的属性或调用方法。反射可以打破封装,从而访问类的私有字段或方法,甚至可以在不提前知道类或方法的情况下,动态创建对象并调用它们。我们可以从以下三个方面来详细解析:Class类、......
  • 21. 反射
    一、什么是反射  Python是一种动态语言,而反射(reflection)机制被视为动态语言的关键。反射机制指的是在程序的运行过程中,对于任意一个类,都可以知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取程序信息以及动态调用对象的功能称为反射机......
  • Java 泛型 Lambda 表达式
    介绍泛型是程序设计的一种特性,它允许强类型程序语言设计代码定义一些可以变的部分,编程中用泛型来代替某个实际的类型,而后通过实际调用传入的类型对泛型进行替换,达到代码复用的目的,有些像函数传参**使用泛型,操作的数据类型被指定为一个参数,这种参数在类接口和......
  • Spring中导致事务传播失效的情况(自调用、方法访问权限、异常处理不当、传播类型选择
    文章目录1.自调用(内部调用)导致事务失效示例:解决办法:2.事务方法不是`public`修饰示例:解决办法:3.未被Spring管理的对象示例:解决办法:4.异常类型不匹配导致事务回滚失败示例:解决办法:5.传播类型使用不当示例:解决办法:6.数据库本身不支持事务解决办法:7.使用了......
  • AOT漫谈专题(第六篇): C# AOT 的泛型,序列化,反射问题
    一:背景1.讲故事在.NETAOT编程中,难免会在泛型,序列化,以及反射的问题上纠结和反复纠错尝试,这篇我们就来好好聊一聊相关的处理方案。二:常见问题解决1.泛型问题研究过泛型的朋友应该都知道,从开放类型上产下来的封闭类型往往会有单独的MethodTable,并共用EEClass,对于值类型......
  • EAS_WEB如何查找点击前台按钮后,调用的后台方法,
    第一种方法:正常有说明的可以直接从后台实现找到第二种方法,找不到的,类似如下,我们可以通过debugger的方式,找到对应的实现,具体路径org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#registerHandlerMethod,没有registerHandlerMethod方法的话,可......
  • 3.12版本的python调用MATLAB2024b,安装matlab.engine教程
    #3.12版本的python只能使用2024b的matlab的接口。一、各个版本的兼容关系如下,可通过下面链接去官网查询。VersionsofPythonCompatiblewithMATLABProductsbyRelease-MATLAB&Simulink二、安装matlab.engine!可能由于版本比较新的原因,查了很多资料,给出的方法都没......