C# 委托2

摘要:
委托的定义:(1)使用方法作为变量的机制是将方法用作变量(声明、赋值和参数传递)(2)要将变量用作方法,必须首先声明变量并考虑变量的类型,即(委托变量、对应方法的返回值、参数等)。顾名思义,委托是委托他人做某些事情,下面是一个示例方法的实现。例如,我现在很饿,但我很懒,我只是不想出去买东西。所以这个时候,我可以委托我的室友帮我复印一份,所以我已经实施了P班的委派

委托的定义:

    (1) 将方法作为变量使用的一种机制,就是将方法当作变量用(声明,赋值,传参)

      (2) 将变量当作方法来用,首先就要去声明变量,就要考虑变量的类型,就是(委托变量,对应方法的返回值,参数等),顾名思义:委托就是委托别人去干某些事情,下面是一个实例方法的实现 例如:我现在饿了,但是我很懒,就是不想出去买,所以这时候我可以委托室友帮我带一份,这样我就已经实现委托了

    

 class Program
    {
        //声明一个委托
        delegate int DelegateCompare(object o1, object o2);

        delegate int DelegateTotal(int num1, int num2);

        static void Main(string[] args)
        {

            //比较两个整数
            DelegateCompare del = intCompare;  //简写
            Console.WriteLine(del(1, 2));

            //比较两个字符的长度
            del = new DelegateCompare(strLengthCompare); //完整写法
            Console.WriteLine(del("123456", "admin"));

            del = PersonAgeCompare;  //简写
            Console.WriteLine(del(new Person("张三", 18), new Person("李四", 20)));

            /*-------------取最大值-----------*/
            DelegateCompare delMax;

            delMax = intCompare; //整数
            Console.WriteLine(GetMax(new object[] { 1, 5, 3, 6, 8, 7 }, delMax));

            delMax = strLengthCompare; //字符串长度
            Console.WriteLine(GetMax(new object[] { "aa", "a", "aaa", "aaaa", "aaaaaaaa", "a" }, delMax));

            delMax = PersonAgeCompare;  //Person类的Age属性
            Console.WriteLine(((Person)GetMax(new object[] { new Person("张三", 18), new Person("李四", 14), new Person("万物", 20) }, delMax)).Name);

            /*----------匿名委托----------*/

            //标准写法
            DelegateCompare del2 = delegate(object o1, object o2) { return (int)o1 - (int)o2; };
            Console.WriteLine("匿名委托" + del2(5, 3));
            //lambda 表达式
            DelegateCompare del3 = (object o1, object o2) => (int)o1 - (int)o2;   //del3 同等于Del4
            DelegateCompare del4 = (object o1, object o2) => { return (int)o1 - (int)o2; };

            /*--------系统委托-----------*/

            //lambda 表达式
            string[] names = { "agen", "balen", "coure", "apple" };
            string[] findNameA = Array.FindAll<string>(names, delegate(string v) { return v.StartsWith("a"); });
            string[] findNameB = Array.FindAll<string>(names, v => v.StartsWith("a"));
            Console.WriteLine(string.Join("-", findNameA));
            Console.WriteLine(string.Join("-", findNameB));

       //泛型集合Int转String数组
List<int> intList = new List<int>() { 1, 23, 4, 5, 56, 6, 6, 76, 7, 7 };
string[] str_array = intList.ConvertAll<string>((int i) => i.ToString()).ToArray(); 
/*----------------多播委托----------*/ //多播委托一般情况下 要求没有返回值, 若有, 则返回最后一个方法的返回值 DelegateTotal delTotal = He; delTotal += Cha; delTotal += Ji; Console.WriteLine(delTotal(2, 4)); Console.ReadKey(); } /// <summary> /// 获取array最大值 /// </summary> /// <param name="arr"></param> /// <param name="del"></param> /// <returns></returns> static object GetMax(object[] arr, DelegateCompare del) { if (arr.Length > 1) { object _max = arr[0]; for (int i = 1; i < arr.Length; i++) { if (del(_max, arr[i]) < 0) { _max = arr[i]; } } return _max; } return null; } /// <summary> /// 比较两个Person类的Age属性 大于0 o1大 等于0 相等 小于0 o2大 /// </summary> /// <param name="o1"></param> /// <param name="o2"></param> /// <returns></returns> static int PersonAgeCompare(object o1, object o2) { return ((Person)o1).Age - ((Person)o2).Age; } /// <summary> /// 比较两个字符串的长度 大于0 o1大 等于0 相等 小于0 o2大 /// </summary> /// <param name="o1"></param> /// <param name="o2"></param> /// <returns></returns> static int strLengthCompare(object o1, object o2) { return o1.ToString().Length - o2.ToString().Length; } /// <summary> /// 比较两个数的大小 大于0 o1大 等于0 相等 小于0 o2大 /// </summary> /// <param name="o1"></param> /// <param name="o2"></param> /// <returns></returns> static int intCompare(object o1, object o2) { return (int)o1 - (int)o2; } /// <summary> /// 求和 /// </summary> /// <param name="num1"></param> /// <param name="num2"></param> /// <returns></returns> static int He(int num1, int num2) { Console.WriteLine("----求和----"); return num1 + num2; } /// <summary> /// 求差 /// </summary> /// <param name="num1"></param> /// <param name="num2"></param> /// <returns></returns> static int Cha(int num1, int num2) { Console.WriteLine("----求差----"); return num1 - num2; } /// <summary> /// 求积 /// </summary> /// <param name="num1"></param> /// <param name="num2"></param> /// <returns></returns> static int Ji(int num1, int num2) { Console.WriteLine("----求积----"); return num1 * num2; } } //定义一个Person类 class Person { //姓名 private string name = ""; //年龄 private int age = 0; //构造方法 public Person(string PName, int PAge) { this.Name = PName; this.Age = PAge; } public int Age { get { return age; } set { age = value; } } public string Name { get { return name; } set { name = value; } } }

免责声明:文章转载自《C# 委托2》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Asp.net 面向接口可扩展框架之使用“类型转化基础服务”测试四种Mapper(AutoMapper、EmitMapper、NLiteMapper及TinyMapper)C#.Net C/S快速开发框架V2.2版本介绍下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

CommonJS规范

NodeJS是本规范的实现。环境、运行、JSGILocaland远程包和包管理关于每个子规范的具体定制进度,请参考官方网站描述:Apache CouchDB和node.js。然而,这些项目中的大多数只实现了CommonJS的一些规范。具体项目及实施请参见官方网站描述:http:...

buildroot使用介绍【转】

整个Buildroot由Makefile脚本和Kconfig配置文件组成。就像编译Linux内核一样,您可以编译一个完整的Linux系统软件,该软件可以通过buildroot配置和menuconfig修改直接写入机器。使用buildroot构建基于qemu的虚拟开发平台。请参阅通过buildroot+qemu构建ARM Linux虚拟开发环境。工具链--˃配...

阿里巴巴开源性能监控神器Arthas初体验

今天跟大家介绍一款阿里巴巴开源的性能分析神器Arthas官方网站:https://alibaba.github.io/arthas/index.htmlArthas能为你做什么事情呢?接下来,我们找个项目实际体验一下Arthas。﹏﹏﹏﹏上述几个命令只是性能测工作中常用的一些操作,Arthas还有很多其他维度的监控数据,大家可以去官网看下用户手册学习更多操作...

10 TCP限流技术

TCP流限制的原因是接收方可以完全接受消息,以确保数据安全而不会丢失。首先,窗口机制引入了发送方和接收方都有一个窗口。当发送方发送数据时,将发送落入窗口中的数据。当接收器接收到数据时,落入接收器窗口的数据将被接受。可以看出,流量会受到窗口大小II的限制。滑动窗口技术1TCP滑动窗口技术通过动态改变窗口大小来调整两台主机之间的数据传输。...

docker run hangs问题排查记录

1.故障描述过去两天遇到了一个非常奇怪的问题。现在完整的故障描述如下:1)首先,我的同事告诉我,K8S集群中的一个工作节点将其状态更改为NoReady,并且在节点kubelet_truntime的错误日志中发现了大量此类日志E060301:50:51.45511776268remote。go:332]ExecSync1f0e3ac13faf224129bc4...

input框输入金额处理的解决办法

最近,已经启动的项目在删除输入输入量时突然出现问题。各种在线搜索都没有找到你想要的。今天,我将以react框架为例进行代码贡献。我会写下需求和解决方案,希望对我的朋友有用。如果有更好的方法实现它,请给我一些建议!”在“:”下;n=数学。防抱死制动系统;vars=“”;对于{s+=.replace;}S=S||“整数”;n=数学。地板对于{varp=“”;对于...