C# 反射调用带参数的重载的泛型方法

反射/特性/委托/泛型/扩展方法 【代码】反射基础。 阅读详情

C# 反射调用带参数的重载的泛型方法。

以及调用时抛出:不能对 ContainsGenericParameters 为 True 的类型或方法执行后期绑定操作异常的解决办法。


话不多说,上代码!

  

  class Aa
    {
        public string CreateSql<T>()
        {
            return "Aa类无参泛型方法";
        }
        public string CreateSql<T>(T t)
        {
            return "Aa类单实体方法";
        }
        public string CreateSql<T>(List<T> t)
        {
            //List有2条数据
            string str = TReflection.GetSql<T>(t, this);
            return str;
        }
    }
    class Bb
    {
        public string CreateSql<T>()
        {
            return "Bb类无参泛型方法";
        }
        public string CreateSql<T>(T t)
        {
            return "Bb类单实体方法";
        }
        public string CreateSql<T>(List<T> t)
        {
            string str = TReflection.GetSql<T>(t, this);
            return str;
        }
    }

    class TReflection
    {
        //需要调用类中的单实体方法
        public static string GetSql<T>(List<T> t, Object _class)
        {
            MethodInfo[] pa = _class.GetType().GetMethods();//反射获得所有方法

            MethodInfo pi = null;
            foreach (MethodInfo method in pa)
            {
                if (method.ToString() == "System.String CreateSql[T](T)")//简单粗暴的获取想要的方法的对象
                {
                    pi = method;
                    break;
                }
            }

            /*
             *如果没有此句代码则会抛出:“不能对 ContainsGenericParameters 为 True 的类型或方法执行后期绑定操作。”的异常。
             *原因:因为调用泛型方法,方法自身的类型参数或任何封闭类型中必须不含泛型类型定义或开放构造类型。进行这种递归确认是很困难的。
             *      为方便起见,也为了减少错误,ContainsGenericParameters 属性提供一种标准方法来区分封闭构造方法(可以调用)和开放构造方法(不能调用)。
             *      如果 ContainsGenericParameters 属性返回 true,则方法不能调用。
             *作用:用类型数组的元素代替当前泛型方法定义的类型参数,并返回表示结果构造方法的 MethodInfo 对象。
             */
            pi = pi.MakeGenericMethod(new Type[] { typeof(T) });

            StringBuilder sb = new StringBuilder();
            foreach (T item in t)
            {
                object[] parament = new object[1];//一个参数
                parament[0] = item;
                sb.Append(pi.Invoke(_class, parament)); //调用方法
            }
            return sb.ToString();
        }
    }


结果:





基于vivado实现FFT/IFFT 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、实现的功能二、配置1.调用DDS的IP核2.调用FFT的IP核三、结果分析1.调用DDS的IP核2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、实现的功能 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任 阅读详情

相关推荐

保姆级教程:用TIA Portal V17给S7-1200 PLC和HMI做个联调仿真(附抢答器完整项目包)

本文提供了一份详细的TIA Portal V17教程,指导如何实现S7-1200 PLC与HMI的联合仿真开发。通过抢答器项目实例,涵盖从环境搭建、PLC编程到HMI设计的全流程,帮助工程师高效完成工业自动化系统的虚拟调试,显著提升开发效率。

weixin_30417487的博客 624

通过反射的方式来执行静态类的泛型方法

今天在公司写代码的时候发生了一个问题;   被调用代码如下:   public static class CatalogComposition { private static AggregateCatalog catalogs = new AggregateCatalog(); public static AggregateCatalog...

weixin_34128411的博客 336

ROS应用之如何配置RTOS满足机器人系统中的实时要求

实时操作系统(RTOS)基本概念实时操作系统(RTOS)是设计用于实时应用的操作系统,其主要目标是在确定的时间内完成任务。RTOS的任务调度算法和优先级控制机制能够确保高优先级任务按时完成。精确的传感器数据采集:传感器数据需要在规定时间内采集并传输给控制系统。快速响应外部事件:对于控制系统,需要确保指令在最短的时间内得到响应。任务的调度周期:任务的周期可以通过公式计算,其中 ftask 是任务的调度频率。优先级分配。

weixin_68094467的博客 1008

对泛型进行反射

今天在用反射的时候突然想到,之前从来没有对泛型对象进行反射,故决定尝试一下首先要获取某个泛型类的Type,键入如下代码:            Type t = Type.GetType("System.Collections.Generic.List");但是调试发现,t为null,看来类名写的不对,再试试,System.Collections.Generic.List,还是错,再试试Syste

ojlovecd的专栏 1万+

《深入 UFS Explorer:自定义 RAID 配置指南》

UFS Explorer支持以虚拟模式组装任何受支持的RAID配置,以便后续访问其内容或恢复丢失数据。启动RAID构建器;向RAID构建器主内容区域的列表中添加RAID组件;为不可用组件插入占位符(需当前RAID级别支持且软件兼容);调整组件的准确顺序;在“虚拟RAID配置”区域设置RAID参数;以虚拟模式组装阵列各部分。程序主窗口“存储设备导航面板”中打开的任何存储设备(包括驱动器、逻辑卷、磁盘镜像、虚拟磁盘及其他复杂存储设备)均可作为RAID组件。

melonbo的专栏 1403

ABAP 里的 XML 与 JSON 处理,一套从接口落地到 Clean Core 的完整参考

ABAP 里的 XML 和 JSON 处理并不只是几段工具类调用。iXML、sXML、、XCO、、code page conversion、GZIP、对象序列化,这些能力背后对应的是不同的数据规模、访问模式、接口契约和运行时边界。小报文、复杂树结构、需要修改节点,iXML 很顺手。大报文、顺序读写、内存敏感,sXML 更可靠。ABAP 结构和 XML、JSON 之间要做标准转换,是主干。现代 JSON API、ABAP Cloud、命名转换,XCO 值得优先考虑。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 224

反射调用重载方法(由入参决定还是获取方法时决定)

反射 反射可以在运行时动态获取类与类成员的定义,以及读取方法。不管类中字段方法如何变动,我们都可以以相同的规则来读取。因此,几乎所有的ORM(对象关系映射)、对象映射、MVC 框架都使用了反射。也是事件委托模式中实现的基础。 当反射遇上重载 定义重载方法,名字都为age,参数一个为Integer,一个为int public class ReflectionApplication { private static final Logger LOGGER = LoggerFactory.getLogger(R

疯狂的蜗牛 2908

【第一章】基于Simulink的控制器开发教程——目录

摘要:本文系统介绍了基于Simulink的控制器开发方法,涵盖PID、状态反馈、模型预测(MPC)、模糊控制、自适应控制等8类主流控制器。针对每种控制器,详细阐述了其基本原理、适用场景,并通过Simulink建模与仿真测试进行实践验证。文章采用"理论+实践"的结构,从算法设计到硬件实现全流程展开,为汽车、航空航天、工业控制等领域的控制器开发提供完整解决方案,最后通过应用对比与学习总结帮助读者掌握不同控制器的核心特性和应用场景。(149字)

熟悉MATLAB/fpga/RK3588/LABVIEW/protus/单片机/dsp/Multisim 387

C# 泛型详解(泛型类,方法,接口,委托,约束,反射 )

泛型(Generic),是将不确定的类型预先定义下来的一种C#高级语法,我们在使用一个类,接口或者方法前,不知道用户将来传什么类型,或者我们写的类,接口或方法相同的代码可以服务不同的类型,就可以定义为泛型。这会大大简化我们的代码结构,同时让后期维护变得容易。...............

熊思雨的博客 2万+

芒果YOLOv1改进35:主干Backbone篇之MobileViTv3:全网首发最新 MobileViTv3 系列最强改进版本(三)|轻量化Transformer视觉转换器,简单有效地融合了本地全局

芒果YOLOv1改进35:主干Backbone篇之MobileViTv3:全网首发最新 MobileViTv3 系列最强改进版本(三)|轻量化Transformer视觉转换器,简单有效地融合了本地全局

包括YOLOv5、YOLOv7、YOLOv8等模型改进 416

软考高级-系统架构设计师 知识点整理 (一篇就够了 建议收藏)

软考高级-系统架构设计师知识点整理---十万字总结,助你通过高级

片言可决讼,半纸能缚龙 7344

C# 中泛型编程之泛型类、泛型方法、泛型约束详解

类型Type现在可以表示带有特定类型的实参(或绑定类型)或未指定类型的泛型(或称未绑定类型)。委托级别的约束只在声明委托变量和实例化委托时使用,类似于在类型和方法的作用范围中实施的其他任何约束。同时子类中的泛型方法不能重复基类泛型方法的约束,这一点和泛型类中的虚方法重写是有区别的,代码如下。////错误 重写和显式接口实现方法的约束是从基方法继承的,因此不能直接指定这些约束。类型参数必须具有无参数的公共构造函数。3.在子类重复基类的约束(在使用子类泛型参数时,必须在子类级别重复在基类级别规定的任何约束)

u011555996的博客 2886

【HALCON 25.11 + C#】 01:2026年工业机器视觉实战详解(从入门到精通)

2026年机器视觉市场规模将突破230亿美元,HALCON 25.11的革命性更新与C#的工业集成优势形成黄金技术栈。本文作为付费专栏开篇序章,聚焦“为什么现在必须学25.11+C#”的核心问题,通过真实工业案例、五项核心技术突破、联合编程架构优势及30篇系统学习路线,全方位论证其投资价值。读者将掌握持续学习、深度OCR加速等关键技能,获得可直接上产线的工业级代码资产与架构设计思维,解决柔性生产、边缘部署等核心痛点,成为具备技术溢价的机器视觉工程师。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1224

c#反射重载方法(发现不明确的匹配)

c#反射重载方法(发现不明确的匹配) GetMethod(string name) 在反射重载方法时,如果调用此重载方法,会产生发现不明确的匹配的错误。 解决方案如下: GetMethod("MethodName", new Type [] { typeof(参数类型)}); 其中type数组中的项的个数是由要调用的方法的参数个数来决定的。 如果无参数,则new Type[]{},使Type数组中的项个数为0 public int IntAdd(int a, int b){ ...

cxu123321的博客 4723

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# 反射与泛型深度结合详解

反射(Reflection)是 C# 的 “元编程” 能力,允许程序在获取类型信息、调用方法、创建实例;泛型(Generic)则是 “类型参数化”,实现类型安全的代码复用。两者结合可突破静态泛型的限制,实现,是框架开发(如 DI 容器、ORM、序列化)的核心技术。本文将从 “基础概念→核心 API→分场景超详细案例→底层原理→避坑指南” 全维度讲解,所有案例均为可直接运行的控制台程序,每一行代码都附带注释和原理说明。

m0_57417006的博客 819

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# 通过反射(Reflection)调用不同名泛型方法

在C#中,通过反射调用泛型方法时,如果方法的名称或参数类型有所不同,那么你需要根据具体的情况来构造合适的对象。由于你提到的是调用“不同名”的泛型方法,这意味着你需要首先确定具体要调用的方法名,然后再处理泛型类型。下面是一个示例,展示了如何通过反射调用具有不同名称的泛型方法。假设我们有一个类,该类包含两个泛型方法: 和 。

学习和分享 896

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

c#泛型使用详解:泛型特点、泛型继承、泛型接口、泛型委托

泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。在.NET类库中处处都可以看到泛型的身影,尤其是数组和集合中,泛型的存在也大大提高了程序员的开发效率。更重要的是,C#的泛型比C++的模板使用更加安全,并且通过避免装箱和拆箱操作来达到性能提升的目的。因此,我们很有必要掌握并善用这个强大的语言特性。 C#泛型特点: 1、如果实例

zdhlwt2008的博客 1万+

C#与CLR学习笔记(8)—— 通过反射调用泛型方法

1 调用非泛型方法 通过反射创建一个对象,然后调用其方法的一般过程为: 加载程序集,并获取类型 通过类型,实例化一个类型对象(调用静态方法则不必实例化) 根据名称、方法签名、可访问性等约束,获取要调用的方法 通过 Invoke 方法,传入实际参数,进行调用。 案例: public class ReflectionTest { // 无参构造函数 public ReflectionTest(){} public void Show(string name, int id)

一土宁的博客 1705

c#-反射-泛型反射

注:关于重载的泛型函数,没有好的解决办法,系统函数也没有为这种情况提供支持,这里用了一种简单的还原字符差别的方式解决的问题,考虑这种情况应该也不常用,价值也不大,所以系统没有提供这里支持(这种情况对应的是代码中的D) 普通反射 泛型类 反射函数 泛型重载 反射加工类 A B C D 处理函数 main1() main2()...

xie__jin__cheng的博客 697

Unity-XLua(38)-定义C#泛型方法与扩展方法

一: lua 调用C#,需要在Xlua中生成“适配代码”,则在这个类打入一个[luaCallCSharp] 的标签。二: 如果lua调用C#的系统API ,则无法拿到源代码,无法打入标签。则 使用“静态列表”方式解决。然后把以上代码放入一个静态类中即可。三: 实际开发过程中,lua 调用C# 用的比较多。xlua 的优点体现的没有必要每次改的时候,都要生成代码。主要原理是依赖于编译器环境下,利用反射来动态生成代码接口。

Asincereman的专栏 2427

一种C#泛型方法在lua中表示的设计

  在进行lua方法注册的时候, 大多数解决方案直接否定了泛型方法, 因为在lua侧难以表达出泛型, 以及lua的函数重载问题, 函数重载问题可以通过一些特殊方法解决, 而泛型问题是主要问题, 以Unity + Slua的情况来说 比如下面的类: public class Foo { public static void Ge...

weixin_33998125的博客 180

泛型反射

一. 泛型回顾 1. 泛型参数可以有多个。 2. 开放类型(泛型类)和封闭类型(泛型类的实例)。 3. 泛型类的继承 4. 泛型约束(where T : new() – 目前.NET只支持无参构造函数的约束) (1)构造函数约束; (2)基类约束; (3)struct/class约束; (4)构造器约束; 5....

aejt95023的博客 93

C#泛型

C#泛型 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:Visual Studio 2015 作者:李成富 撰写时间:2019年7月13日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 泛型允许延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛...

weixin_44570549的博客 574
上一篇: Oracle一次执行(插入、更新、删除)多条语句的办法
下一篇: SQLServer、Oracle获取数据库、表、表里字段、类型、主键、标识、注释
DayDay_Code
博客等级 码龄14年 31粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值