C#多播委托

概述

  在上一篇文章中,笔者就个人理解的委托做了简单的分享,本篇文章主要来说说多播委托。多播委托即每个委托可以包含多个方法。

理解多播委托

  多播委托可以保护多个方法,但是在使用的时候需要注意:委托的签名必须是返回void,否则只能调用最后一个方法的得到结果。多播委托派生自System.MulticastDelegate类,System.MulticastDelegate类又派生自System.Delegate。System.MulticastDelegate的其他成员可以允许把多个方法调用链接为一个列表。

下面写一个简单的示例

    class Program
    {
        static void Main(string[] args)
        {
            Action<string> operationActions = Teacher.Show;
            operationActions += Student.Show;
            operationActions.Invoke("zhangsan");

            Console.ReadKey();
        }
    }

    public class Teacher
    {
        public static void Show(string name)
        {
            Console.WriteLine("teacher say: my name is {0}",name);
        }
    }

    public class Student
    {
        public static void Show(string name)
        {
            Console.WriteLine("student say: my name is {0}", name);
        }
    }

 运行结果如下,非常简单,两个方法按顺序执行

时间: 2024-10-18 03:56:44

C#多播委托的相关文章

Net中委托之二多播委托

本篇主要讲解多播委托 1.多播委托的实例 public class MyDelegate { private delegate int NoParameterWithReturn();//1.声明委托 public static void Show() { NoParameterWithReturn method = new NoParameterWithReturn(ShowSomething);//2.委托的实例化 //多播委托 method += ShowSomething;//按顺序添加

委托和多播委托

刚刚学习了委托的内容,先来说一下自己对委托的理解,权当是复习吧: 委托可以定义在类里面,也可以定义在类外面,如果定义在类里面就只能被这个类调用,不论声明它是public 还是private.如果定义在类外面就能被所有类调用.如果程序是多线程的,委托方法希望能在UI层调用,那么可以在命名空间下定义. //委托的声明 delegate关键字,这个委托只能代表返回值是空.参数是一个string类型的一个方法public delegate void GreetingDelegate(string nam

委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托

在"委托.Lambda表达式.事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性"中,反编译委托,发现委托都是多播委托. 既然委托是多播委托,我们可以通过"+="把多个方法赋给委托变量,这样就形成了一个委托链, 它是怎样形成的?来看下面的例子: namespace ConsoleApplication3 { internal delegate void MySayDel(string msg); class Program { stati

多播委托和匿名方法再加上Lambda表达式

多播委托就是好几个方法全都委托给一个委托变量 代码: 1 namespace 委托 2 { 3 class Program 4 { 5 static void math1() 6 { 7 Console.WriteLine("这是第一个方法"); 8 } 9 10 static void math2() 11 { 12 Console.WriteLine("这是第二个方法"); 13 } 14 15 static void Main(string[] args) 1

从多播委托到事件

一.多播委托 前文提到的委托只是在一个委托类型中存储了一个方法(函数),实际上一个委托变量可以同时绑定多个方法,这些委托形成了一个委托链,每一个委托(实际上是方法)都顺序指向下一个委托,这个委托链就是多播委托. 每一个绑定的方法就像是订阅者一样,等着发布者的消息,而触发委托变量的那个就像是发布者,将出发的信号传给所有的订阅者. 1.订阅者 考虑一个温度控制器的例子,这个控制器拥有两个调温器,一个加热器,当温度低于指定的值时,启动,一个冷却器,当温度高于指定的温度时,启动.二者的类设计如下: 1

委托三------------多播委托与匿名方法

============================================多播委托 -------------------------------------主程序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication3 {     class Pr

多播委托

首先定义两个委托和几个方法,后面会用到. 委托: 1 public delegate void M1Delegate(); 2 3 public delegate int M2Delegate(int x,int y); 方法: 1 static int A1(int x,int y) 2 { 3 return x + y; 4 } 5 6 static int A2(int x, int y) 7 { 8 return x + y; 9 } 10 11 static int A3(int x,

【C#进阶】多播委托和委托数组像是一回事~

这个MathOperation类有三静态方法,参数都是double,并且没有返回值,考虑用Action<>() 这种预定义的委托哦 class MathOperations { public static void MultiplyByTwo(double value) { Console.WriteLine( "2* {0} = {1}",value,value * 2); } public static void Square(double value) { Conso

多播委托和事件

事件的创造规则是类型必须是一个委托的类型,也就是说是委托实例化了事件 事例代码如下: 这是两个以后要被委托的方法: public class EventManager { //第一个方法 public void Add(int i,int j) { int res = i + j; MessageBox.Show(res.ToString()); } //第二个方法 public void SayHello(int i,int j) { MessageBox.Show("hello word&q