委托<一>

 

前几天在亚马逊买了几本.net 的书,其中包括一本《深入理解C#》 不容质疑,这是我看过的最好的一本介绍.net,推荐给所有进阶的.net程序员

一直都想系统的学习委托,今天刚好有时间,一边复习考试,一本学习准备实习。

闲话就不扯了,开始讲讲今晚的收获!

先简答介绍一下委托吧

C#中,委托(delegate)是一种引用类型,在其他语言中,与委托最接近的是函数指针,但委托不仅存储对方法入口点的引用,还存储对用于调用方法的对象实例的引用。

委托的四个条件:

1.声明委托类型

2.必须有一个方法包含了要执行的代码

3.必学创建一个委托实例

4.必须调用(invoke)委托实例

值得注意的地方:

      (1)委托也是一种类型,delegate void  delegatetest(string input ) 这是一个委托声明,其实就是一个类型声明,我们可以吧delegate就看成是一个class ,这个class声明就想是一个函数,有函数的返回类型和函数的返回值。

      (2)委托类型和委托实例是不同的概念,上面就是一个委托类型,委托实例也得用一个new创建;

      (3)创建委托实例要指明回调方法(类型匹配)

      (4)不要忘记执行委托

下面直接以一个简单的例子来说明委托的基本运用:

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace ConsoleApplication1
 7 {
 8 
 9     delegate void StringProcess(string input);  //1.声明委托类型
10 
11     class person {
12          string name;
13          public person(string name){this.name=name;}
14 
15          public void Say(string message)               //2.必须有一个方法包含了要执行的代码
16          { 
17              Console.WriteLine("{0} say: {1}",name,message);
18          }
19     }
20 
21     class BackGround {
22 
23         public static void Note(string message)       //2.必须有一个方法包含了要执行的代码
24        {
25            Console.Write(message);
26        }
27     }
28 
29    public class delegate1
30     {
31       public static void MainFunction()
32         {
33             person john = new person("john");
34             person tom = new person("tom");
35 
36             BackGround noteSomething = new BackGround();
37 
38             StringProcess johnTest, tomTest, noteTest;   //3.必学创建一个委托实例
39             johnTest = new StringProcess(john.Say);       //给每个实例指定委托调用方法
40             tomTest = new StringProcess(tom.Say);            //(指定实例方法)
41             noteTest = new StringProcess(BackGround.Note);  //(指定静态方法)
42            
43 
44             johnTest("i am john");                       //4.必须调用(invoke)委托实例
45             tomTest.Invoke("i am tome");                 //编译的时候仍然会编译成 tomTest.Invoke("i am tome"); 
46             noteTest("hi gile, i am coming");            //这个形式,但书写一般只需:johnTest("i am john");   
47         }
48     }
49 }
View Code

一天学习一点,慢慢积累! 期待更好的明天!

 

posted @ 2013-06-14 00:24  Jackvin  阅读(227)  评论(0编辑  收藏  举报