C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。

简介: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Linq.Expressions;

namespace INPEXOne.LearnCS
{
    class RefletLambdaDelegate
    {
        static object[] parameters = new object[] { 1, 2 };
        public delegate int addDelegate(int a, int b);

        public int add(int a ,int b) 
        {
            return a + b;
        }

        public static void Main() 
        {
            RefletLambdaDelegate rld=new RefletLambdaDelegate();       
            //利用反射调用add方法.
            MethodInfo add = typeof(RefletLambdaDelegate).GetMethod("add");
            Console.WriteLine("The add result from using the reflection is : {0}",add.Invoke(rld, parameters));

            //利用Lambda表达式树调用add方法.
            Expression<Func<int, int, int>> extree = (a,b) => rld.add(a, b);
            Func<int, int, int> delinstance = extree.Compile();
            int result = delinstance(int.Parse(parameters[0].ToString()), int.Parse(parameters[1].ToString()));
            Console.WriteLine("The add result from using the LambdaTree is : {0}",result);

            //利用Lambda表达式调用add方法.
            Func<int, int, int> addLambda = (c, d) => rld.add(c, d);
            int result1 = addLambda(int.Parse(parameters[0].ToString()), int.Parse(parameters[1].ToString()));
            Console.WriteLine("The add result from using the Lambda without tree is : {0}",result1);

            //利用委托调用add方法.
            addDelegate addDelgateInstance = new addDelegate(rld.add);
            int result2 = addDelgateInstance(int.Parse(parameters[0].ToString()), int.Parse(parameters[1].ToString()));
            Console.WriteLine("The add result from using the delegate is : {0}", result2);

            //利用匿名方法调用add方法.
            addDelegate AnonymousInstance = delegate(int a, int b) { return rld.add(a,b); };
            int result3 = AnonymousInstance(int.Parse(parameters[0].ToString()), int.Parse(parameters[1].ToString()));
            Console.WriteLine("The add result from using the anonymous method is : {0}", result3);
            Console.ReadLine();
        }
    }
}

以上代码分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较,输出结果为:

相关文章
|
存储 安全 算法
基于 C# Trie 树的'管控员工上网 URL 过滤与匹配优化方案探索
本文探讨了 Trie 树在员工上网管控中的应用,分析其在 URL 实时过滤中的高效性,包括前缀匹配、存储优化和动态更新等优势,并提供 C# 实现方案,助力企业提升网络管理效率。
303 0
|
12月前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
481 4
|
监控 算法 安全
基于 C# 基数树算法的网络屏幕监控敏感词检测技术研究
随着数字化办公和网络交互迅猛发展,网络屏幕监控成为信息安全的关键。基数树(Trie Tree)凭借高效的字符串处理能力,在敏感词检测中表现出色。结合C#语言,可构建高时效、高准确率的敏感词识别模块,提升网络安全防护能力。
398 2
|
存储 监控 算法
局域网上网记录监控的 C# 基数树算法高效检索方案研究
在企业网络管理与信息安全领域,局域网上网记录监控是维护网络安全、规范网络行为的关键举措。随着企业网络数据量呈指数级增长,如何高效存储和检索上网记录数据成为亟待解决的核心问题。基数树(Trie 树)作为一种独特的数据结构,凭借其在字符串处理方面的卓越性能,为局域网上网记录监控提供了创新的解决方案。本文将深入剖析基数树算法的原理,并通过 C# 语言实现的代码示例,阐述其在局域网上网记录监控场景中的具体应用。
334 7
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
388 66
|
C# UED SEO
C# 异步方法async / await任务超时处理
通过使用 `Task.WhenAny`和 `Task.Delay`方法,您可以在C#中有效地实现异步任务的超时处理机制。这种方法允许您在指定时间内等待任务完成,并在任务超时时采取适当的措施,如抛出异常或执行备用操作。希望本文提供的详细解释和代码示例能帮助您在实际项目中更好地处理异步任务超时问题,提升应用程序的可靠性和用户体验。
905 3
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
879 2
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
660 1
|
C#
C#的方法的参数传递
C#的方法的参数传递
393 0
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
491 0