C#的multi-casting delegate(委托)

using System;
using System.IO;

namespace ConsoleApplication2
{
   delegate void D(int x);
    class Program
    {

        static void Main(string[] args)
        {
            D cd1 = new D(C.M1);
            cd1(-1);
            Console.WriteLine();
            D cd2 = new D(C.M2);
            cd2(-2);
            Console.WriteLine();
            D cd3 = cd1 + cd2;
            cd3(10);
            Console.WriteLine();
            C c = new C();
            D cd4 = new D(c.M3);
            cd3 += cd4;
            cd3(30);
            Console.WriteLine();
            cd3 -= cd4;
            cd3(10);
            Console.WriteLine();
            Console.ReadLine();
        }

    }
    class C
    {
        public static void M1(int i)
        {
            Console.WriteLine("C.M1:"+i);
        }
        public static void M2(int i)
        {

            Console.WriteLine("C.M2:" + i);
        }
        public void M3(int i)
        {
            Console.WriteLine("C.M3:"+i);
        }
    }

}
时间: 2024-10-09 10:34:11

C#的multi-casting delegate(委托)的相关文章

快速理解C#高级概念(一) Delegate委托

做.NET开发很久,最近重新温习<C#高级编程>一书.发现很多曾经似懂非懂的问题,其实也是能够慢慢钻研慢慢理解的. 所以,打算开写<C#高级编程系列>博文.其中会借鉴<C#高级编程>一书的概念,也会参照其他高手的博文,希望大家谅解.有不对的地方,欢迎指正. (另:本博文不会讲解定义,语法方面的基础知识.) 下面如题,我们来讲委托. Delegate委托,在.NET中应用的非常广泛.会涉及到Lambda表达式,事件,匿名方法等(请关注后续博文). 那么何为委托? 通俗的来

关于js模拟c#的Delegate(委托)实现

这是我的第一篇博文,想来讲一讲js的函数.我的标题是js模拟c#的Delegate. 一.什么是Delegate(委托) 在jquery中有delegate函数,作用是将某个dom元素的标签的事件委托给一个函数队列,在触发这个事件的时候会触发这个函数队列中的所有函数.而c#中的Delegate对象也是如此,将多个方法添加至一个委托对象,或称将多个方法委托给一个委托对象,当调用委托对象的Invoke方法时会调用所有被委托的方法.由此可以看出Delegate的本质应该是一个函数队列,执行委托对象就是

delegate委托的C++实现--C++11/14(原创)

熟悉C#的人都清楚delegate,也清楚委托的作用. 实现观察者模式,在C++中的一种做法就是通过接口继承来实现,这无疑大大增加了耦合度.通过delegate变可以解除这种耦合. 下面是上班时间,偷偷实现的一个我的delegate.直接上码: #include<list> #include<functional> #include<iostream> #include<string> #include<algorithm> using name

C#delegate委托

类似函数,却没有语句体. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication3 { class Program { delegate double ProcessDelegate(double param1, double param2); //委托定义 sta

C# 匿名方法 委托 Action委托 Delegate委托

原文地址:https://msdn.microsoft.com/zh-cn/library/bb882516.aspx 匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用. 可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数. C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式. 实例参考: 1 using System; 2 using System.Collection

delegate委托事件(动态创建元素注册事件)

有这样一个小例子: <!--需求:给li里的a标签注册点击事件,并且点击"添加"按钮,新增li标签,新增的li里的a同样有注册事件--> <input type="button" id="btn" value="添加"/> <ul class="box"> <li> <a href="javascript:void(0)">点击

c# 通过delegate委托向主线程发送信息

c# windows编程,常会用到多线程,在新开的线程中要对主线程的页面数据进行更改时,需要通过delegate进行委托 public delegate void show(string info); //定义一个委托,参数为string private void add_info_event(string info) //定义一个方法,判断控件是否需要引用才可操作,将该方法与委托进行绑定,并用Invoke调用该委托和传递参数. { if (this.txb_info.InvokeRequire

delegate 委托

1 class Program 2 { 3 static void Main() 4 { 5 Class1 c1 = new Class1(); 6 c1.Start(); 7 } 8 } 9 10 class Class1 11 { 12 public static void Hello() 13 { 14 Console.WriteLine("Hello"); 15 } 16 17 public void Start() 18 { 19 Class2 c2 = new Class2

delegate委托的例子,实现对Form中控件的更新

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace In

delegate委托

public delegate void Del(); public delegate string DelStr(string name); class Program { static string Name = string.Empty; static void Main(string[] args) { //Del del = Test; //Del del = delegate() { }; //=>goes to 去执行 //Del del = () => { }; //DelSt