C#委托基础2——多路委托

 

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客。

 

多路委托

class Program
    {
        public delegate void SayThingToS(string s);

        void SayHello(string s)
        {
            Console.WriteLine("你好{0}", s);
        }

        void SayGoodBye(string s)
        {
            Console.WriteLine("再见{0}", s);
        }

        static void Main(string[] args)
        {
            // 方式一
            SayThingToS say1, say2, say3, say4;
            Program p = new Program();
            say1 = p.SayHello;
            say1("xy"); // 你好xy

            say2 = p.SayGoodBye;
            say2("xy"); // 再见xy

            say3 = say1 + say2;
            say3("xy"); // 你好xy,再见xy

            say4 = say3 - say1;
            say4("xy"); // 再见xy

            // 方式二
            SayThingToS s1 = new SayThingToS(p.SayHello);
            s1 += new SayThingToS(p.SayGoodBye);
            s1("xy"); // 你好xy,再见xy

            SayThingToS s2 = new SayThingToS(p.SayHello);
            s2 += new SayThingToS(p.SayGoodBye);
            s2 -= new SayThingToS(p.SayHello);
            s2("xy"); // 再见xy
        }
    }

本文参考自金旭亮老师的《.NET 4.0面向对象编程漫谈》有关代理的内容

时间: 2024-09-20 08:00:19

C#委托基础2——多路委托的相关文章

C#委托基础5——泛型委托Action

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.本文参考自金旭亮老师的<.NET 4.0面向对象编程漫谈>有关代理的内容   为了方便开发,.NET基类库针对在实际开发中最常用的情形提供了几个预定义好的委托,这些预定义委托用得很广,比如在编写lambda表达式和开发并行计算程序时经常要用到他们 对于函数返回值为空的情形,可以使用Action泛型委托 class Program { // 对于函数返回值为空的情形,可以使用Action泛型委托 void Showst

C#委托基础6——泛型委托Predicate

  C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.   此委托返回一个bool值,该委托通常引用一个"判断条件函数".需要指出的是,判断条件一般为"外部的硬性条件",比如"大于50",而不是由数据自身指定,不如"查找数组中最大的元素就不适合".   例一 class Program { bool IsGreaterThan50(int i) { if (i > 50) return tru

C#委托基础4——泛型委托Func

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客. 为了方便开发,.NET基类库针对在实际开发中最常用的情形提供了几个预定义好的委托,这些预定义委托用得很广,比如在编写lambda表达式和开发并行计算程序时经常要用到他们.   预定义泛型委托Func class Program { double AddInt(int x, int y) { return x + y; } string AddString(string s1, string s2) { return

C#委托基础3——泛型委托

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.   泛型委托 class Program { // 泛型委托,与普通委托类似,不同之处只在于使用泛型委托要指定泛型参数 public delegate T MyGenericDelegate<T>(T obj1,T obj2); int AddInt(int x, int y) { return x + y; } string AddString(string s1, string s2) { return s1

C#委托基础1——委托基础

  C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客. 委托和其委托的方法必须具有相同的签名.签名相同:1.参数类型相同 2.参数数量相同 3.返回值一致   例一 class Program { public delegate int MathMethod(int x, int y); public int Add(int a, int b) { return a + b; } static void Main(string[] args) { MathMethod

C#委托基础7——匿名方法

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.   class Program { double AddInt(int x, int y) { return x + y; } string AddString(string s1, string s2) { return s1 + s2; } static void Main(string[] args) { Program p = new Program(); // 以为前两个参数为int,他们运行的结果为dou

C#委托基础9——Invoke与委托

  C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客.   例一 delegate void AppendStringCallback(string text); private void AppendString(string txt) { this.listView1.Items.Add(txt); } private void ReceiveDate() { AppendStringCallback appendStringCallback = new Appe

C#委托基础8——lambda表达式

  C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客. class Program { double AddInt(int x, int y) { return x + y; } string AddString(string s1, string s2) { return s1 + s2; } static void Main(string[] args) { Program p = new Program(); // 以为前两个参数为int,他们运行的结果为dou

C#零基础学习理解委托_C#教程

   说来惭愧,在大学的课程中,竟然没有听说过委托这个名称.那么今天我就带着大家一起探讨下委托和事件. 咱们先来看下委托 我主要从以下几个方面讲解 1,  为什么使用委托  2.什么是委托  3.委托如何使用 为什么使用委托? 委托是c#中非常重要的一个概念,使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法.与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的. 什么是委托? 委托是一种引用方法的类型,一