C# 委托,合并委托(多路广播委托)

委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。下面的示例声明了一个名为Del的委托,该委托可以封装一个采用字符串作为参数并返回void的方法。
public delegate void Del(string message);

构造委托对象时,通常提供委托将包装的方法的名称或使用 匿名方法 。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方。这被称为调用委托。可以将一个实例化的委托视为被包装的方法本身来调用该委托。例如:
// Create a method for a delegate.
public static void DelegateMethod(string message)
{
    System.Console.WriteLine(message);
}

本示例演示如何组合多路广播委托。委托对象的一个用途在于,可以使用+运算符将它们分配给一个要成为多路广播委托的委托实例。组合的委托可调用组成它的那两个委托。只有相同类型的委托才可以组合。

-运算符可用来从组合的委托移除组件委托。

    class Class1
    {
      
        public delegate void PrintDelegate(string name, string id);

        public delegate void Del(int i);

        static void Main(string[] args)
        {
            Class1 obj = new Class1();


            PrintDelegate delegate1 = PrintStudent;
            PrintDelegate delegate2 = obj.PrinteBook;

            // +运算符操作的对象只能是委托对象。
            //PrintDelegate multiDel = delegate1 + delegate2;
            
            //但是 += 右边的操作对象可以是方法签名。
            //简单的多播委托。 
            PrintDelegate multiDel = null;
            multiDel += obj.PrinteBook;
            multiDel += PrintStudent;
            multiDel("test", "123");

           
            Del d = delegate(int i)
            {
                Console.WriteLine(++i);
            };

            d(10);
            
            Console.Read();
        }

        /**
         * 静态方法和非静态方法都可以用于委托的,签名方法。
         * */

        //静态方法
        public static void PrintStudent(string name, string id)
        {
            Console.WriteLine("学生信息");
            Console.WriteLine("学号:{0}",id);
            Console.WriteLine("姓名:{0}",name);
        }

        //非静态方法。  
        public void PrinteBook(string bookName, string code)
        {
            Console.WriteLine("书籍信息");
            Console.WriteLine("编号:" + code);
            Console.WriteLine("书名:" + bookName);
        }

       
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值