码迷,mamicode.com
首页 > 其他好文 > 详细

委托&指针函数&回调函数

时间:2015-05-12 10:50:24      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

委托

委托是一种数据类型,像类一样(可以声明委托类型变量)方法参数可以是int string 类类型。

 

//1
//委托小结
//1 定义一个委托需要delegate关键字
//public delegate void WriteTimeToAny();

//2 委托用来存储的方法要与定义的委托类型相一致
//3 委托是一个数据类型,用时需要传递一个变量,可以使用关键字new也可以不使用

//使用委托的意义
//主要是注入代码,写入一个委托类型方法方便以后使用时可以用实现相应的功能


//2
//系统时间的表示方法File.WriteAllText(@"time.txt", System.DateTime.Now.ToString("yy-MM-dd hh:mm:ss"));


//3
//类库的使用
//1 定义一个类库
//2 在新建项目中添加类库的引用
//3 添加类库的命名空间就可以使用类库了

委托实例:

1 定义一个类库和一个委托

 1 namespace ClassLibrary1
 2 {
 3     public class Class1
 4     {
 5         //声明一个委托
 6         public WriteTimeToAny writeTime;
 7         public void DoSometing()
 8         {
 9             Console.WriteLine("---------------------------------------------------------------------");
10             Console.WriteLine("---------------------------------------------------------------------");
11             writeTime();
12             Console.WriteLine("---------------------------------------------------------------------");
13             Console.WriteLine("---------------------------------------------------------------------");
14         }
15     }
16 }
17 
18 
19 namespace ClassLibrary1
20 {
21     //public class WriteTimeToAny
22     //定义一个没有返回值没有参数的委托
23     public delegate void WriteTimeToAny();
24 
25 }

使用委托一

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Class1 cls1 = new Class1();
 6             cls1.writeTime = M1;
 7             cls1.DoSometing();
 8             Console.ReadKey();
 9         }
10 
11         static void M1()
12         {
13             Console.WriteLine("系统当前时间:{0}",System.DateTime.Now.ToString("yy-MM-dd hh:mm:ss"));
14 
15         }
16     }
17 }

 

使用委托二

  

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Class1 cls = new Class1();
 6             cls.writeTime = M1;
 7             cls.DoSometing();
 8            
 9             Console.ReadKey();
10 
11         }
12         static void M1()
13         {
14             File.WriteAllText(@"time.txt", System.DateTime.Now.ToString("yy-MM-dd hh:mm:ss"));
15             Console.WriteLine("OK");
16         }
17     }

 

 

回调函数:

function invoke_and_add(a,b){
return a()+b();
}

function one(){
return 1;
}

function two(){
return 2;
}

invoke_and_add(one ,two);

invoke_and_add(function(){return 1;},function(){return 2;})
通过上面两个实例,回调函数的定义为:传递一个函数A到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称,就叫做匿名回调函数

回调函数的作用
主要有三个
1.当函数作为参数传递的时候,不用为这个函数定义一个名称,这样的好处是减少了全局变量。
2.节省了大量的代码。
3.提高了程序的性能。

 

 

指针函数
定义
编辑

首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有“函数返回值”,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
2定义格式
编辑

类型名 *函数名(函数参数列表);
其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。
“(函数参数列表)”中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下:
int *pfun(int, int);
由于“*”的优先级低于“()”的优先级,因而pfun首先和后面的“()”结合,也就意味着,pfun是一个函数。即:
int *(pfun(int, int));
接着再和前面的“*”结合,说明这个函数的返回值是一个指针。由于前面还有一个int,也就是说,pfun是一个返回值为整型指针的函数。
返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。

 

委托&指针函数&回调函数

标签:

原文地址:http://www.cnblogs.com/lv-sally/p/4496409.html

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