码迷,mamicode.com
首页 > Windows程序 > 详细

正式进入C#的世界——委托

时间:2015-09-19 16:38:12      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:

委托(delegate)1、可以认为是这样的对象,它包含具有相同签名和返回值类型的有序方法列表。2、可以理解为函数的一个包装,它使得C#中的函数可以作为参数来被传递。

委托的定义和方法的定义类似,只是在定义的前面多一个delegate关键字。 

public delegate void MyDelegate( int para1, string para2);
//包装
public void MyMethod(int a, string b); //返回类型相同,参数个数,顺序和类型相同。
  • 方法的签名 必须 与 委托 一致,方法签名包括参数的个数、类型和顺序。
  • 方法的返回类型要和 委托 一致,注意,方法的返回类型不属于方法签名的一部分。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 作业1
    {
        class Program
        {
            //1.使用delegate定义一个委托类型
            delegate void MyDelegate(int para1, int para2);
            static void Main(string[] args)
            {
            
                //2.声明委托变量d
                MyDelegate d;
    
                //3.实例化委托类型,传递的方法也可以为静态方法,这里传递的是实例方法
                d=new MyDelegate(new Program().Add);
    
                //4.委托类型作为参数传递给另一个方法
                MyMethod(d);
                Console.ReadKey();
            }
    
            //该方法的定义必须与委托定义相同,即返回类型为void,两个int类型的参数
            void Add(int para1,int para2)
            {
                int sum = para1 + para2;
                Console.WriteLine("两个值的和为:"+sum);
            }
    
            //方法的参数是委托类型
            private static void MyMethod(MyDelegate mydelegate)
            {
                //5. 在方法中调用委托
                mydelegate(1, 2);
            }
    
           
        }
    }

    委拖链

委托链其实就是委托类型,只是委托链把多个委托链接在一起而已,也就是说,我们把链接了多个方法的委托称为委托链或多路广播委托。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 作业1
 8 {
 9     class Program
10     {
11         public delegate void DelegateTest();
12         static void Main(string[] args)
13         {
14         
15             //用静态方法实例化委托
16             DelegateTest dtDelegate = new DelegateTest(Program.method1);
17 
18             //用实例方法
19             DelegateTest deDelegate1 = new DelegateTest(new Program().method2);
20 
21             //定义一个委托对象,一开始指定为空,即不代表什么方法
22             DelegateTest delegateChain = null;
23 
24             //使用+符号链接委拖 -符号移除委托
25             delegateChain += dtDelegate;
26             delegateChain += deDelegate1;
27             delegateChain += deDelegate1;
28             delegateChain += dtDelegate;
29             delegateChain-= dtDelegate;
30             delegateChain();
31             
32             Console.ReadKey();
33         }
34 
35        
36         //静态方法
37         private static void method1()
38         {
39             Console.WriteLine("这里是静态方法");
40         }
41 
42         private void method2()
43         {
44             Console.WriteLine("这里是实例方法");
45         }
46     }
47 }

 

正式进入C#的世界——委托

标签:

原文地址:http://www.cnblogs.com/-more/p/4821589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!