深入委托与多播委托的详解

时间:2023-05-29 07:07:15 


using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
    class 简单的委托实例
    {
        public static double Area(double Val)
        {
            return Val * 2;
        }
        public static double Scare(double Val)
        {
            return Val * Val;
        }
    }
    class Test
    {
        public delegate double delegateTest(double dd);
        static void Main()
        {
            //实例化了个委托数组,(一旦定义了委托类,就可以实例化它的实例)
            delegateTest[] Operations =
                {
                    //说明了委托的一种方式,把方法组合到数组
                  new delegateTest(简单的委托实例.Area),
                  new delegateTest(简单的委托实例.Scare)
                };
            for (int i = 0; i < Operations.Length; i++)
            {
                Console.WriteLine("Using Operations[{0}]", i);
                Test MyTest = new Test();
                //把委托传递给ProcessDelagate()这个方法,Operations[0]可以理解成delegateTest Operations =new delegateTest(简单的委托实例.Area);调用ProcessDelagate这个方法的时候Operations代理的方法是简单的委托实例.Area
                MyTest.ProcessDelagate(Operations[i], 12.0);
                MyTest.ProcessDelagate(Operations[i], 2.0);
                Console.WriteLine();
            }
        }
        //把委托作为一个参数传递到ProcessDelagate()第一个参数中
        void ProcessDelagate(delegateTest Action, double d)
        {
            double Result = Action(d);
            Console.WriteLine("提供的值是{0},结果是{1}", d, Result);
        }
    }
}



using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
    //如果要多次调用这个方法,那么就要多次调用这个委托,委托包含多个方法,这个种委托就是多播委托!
    class 多播委托
    {
        //用的是void没有返回值
        public delegate void DelageteTest(double val);
        static void Main()
        {
            //多播委托中添加2个方法
            DelageteTest MyTest = new DelageteTest(Test.Area);
            MyTest += new DelageteTest(Test.Scare);
            //下面的代码跟上面的3行代码是等价的
            //DelageteTest MyTest;
            //DelageteTest Test1 = new DelageteTest(Test.Area);
            //DelageteTest Test2 = new DelageteTest(Test.Scare);
            //MyTest = Test1 + Test2;
            多播委托 多 = new 多播委托();
            多.OPreation(MyTest, 2.0);
            多.OPreation(MyTest, 12.0);
        }
        void OPreation(DelageteTest Action, double d)
        {
            Action(d);
        }
    }
    class Test
    {
        public static void Area(double Val)
        {
            Console.WriteLine(Val * 2);
        }
        public static void Scare(double Val)
        {
            Console.WriteLine(Val * Val);
        }
    }
}


标签:c#,委托,多播委托
0
投稿

猜你喜欢

  • java 遍历Map的几种方法总结

    2023-09-25 23:39:21
  • springBoot的事件机制GenericApplicationListener用法解析

    2023-09-02 14:22:26
  • 教你轻松制作java音乐播放器

    2023-09-27 11:17:11
  • java15新功能的详细讲解

    2023-08-23 04:40:21
  • Java 中的变量类型

    2022-05-27 20:00:19
  • Android实现图片轮播效果

    2022-01-24 02:33:13
  • Android打开GPS导航并获取位置信息返回null解决方案

    2021-08-31 09:21:19
  • Android仿微信照片选择器实现预览查看图片

    2022-02-03 12:25:51
  • java跟踪执行的sql语句示例分享

    2022-07-30 20:13:18
  • Android发布项目到jitpack的完整步骤

    2021-11-29 08:42:10
  • Android实现银行卡号扫描识别功能

    2021-09-05 01:56:50
  • 浅析Java的Hibernate框架中的缓存和延迟加载机制

    2023-04-12 15:58:00
  • Android中使用开源框架eventbus3.0实现fragment之间的通信交互

    2021-06-30 09:23:07
  • java基础学习笔记之泛型

    2022-05-31 01:49:44
  • 基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例

    2022-06-24 08:07:48
  • Java扩展库RxJava的基本结构与适用场景小结

    2022-12-27 10:03:15
  • .net与javascript脚本的交互方法总结

    2021-09-11 09:21:32
  • 详解Mybatis通用Mapper介绍与使用

    2023-11-29 08:49:08
  • java实现快速打字游戏

    2022-11-05 11:16:38
  • Android ViewPager无限循环滑动并可自动滚动完整实例

    2022-09-09 18:26:55
  • asp之家 软件编程 m.aspxhome.com