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

委托

委托是一种数据类型,像类一样(可以声明委托类型变量)方法参数可以是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是一个返回值为整型指针的函数。
返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。

时间: 2024-10-07 21:37:28

委托&指针函数&回调函数的相关文章

深入浅出剖析C语言函数指针与回调函数(二)

上一篇博文的地址: http://blog.csdn.net/morixinguan/article/details/65494239 这节,我们来看看函数指针与回调函数在Linux内核中的应用. 从上节我们了解到,函数指针和回调函数在开发者和用户之间的一个例子,那么这节,我将引用Linux内核中文件操作结构体来详细的说明. 我们首先来看到这个结构体,这段代码位于linux内核的include/linux/fs.h中,由于代码众多,我只截取几个最基本的例子: File_operations文件操

函数指针和回调函数

函数指针 函数指针是指向函数调用地址的指针.它和函数名究竟有什么关系呢?且看下文. 且看一小程序 首先,先请看下边程序: 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 void func(string s) 6 { 7 cout << s << endl; 8 } 9 10 void (*pFunc)(string s); // 不能够写成 void *pFunc(s

【C语言】函数指针与回调函数

在C语言中:指针是C语言的特色,有着各种各样的指针,普通的变量指针,常量指针,数组指针,指针数组,函数指针,指针函数.我们就讲一下函数指针与回调函数吧 首先关于函数指针,其实很简单. 对于一个函数指针来说,顾名思义,就是一个指向函数的指针,需要知道的是,对于指针而言,他总是存储一块地址,地址里面有着一个,一组,或者一块数据,在函数中,函数的存储是放在代码段的,每个函数都有着一个函数首地址,调用了这个地址相当于调用的这个函数. 具体的可以观看我的这篇博客,其中就通过在内存阶段改变栈帧返回值,成功的

C函数指针与回调函数

一.函数指针 简单声明一个函数指针并不意味着它马上就可以使用,和其它指针一样,对函数指针执行简接访问之前必须把它初始化为指向某一个函数. int f(int); int (*pf)(int)=&f; 第二个声明创建了函数指针pf,并把它初始化为指向函数f.函数指针的初始化也可以通过一条赋值语句完成.在函数指针的初始化之前具有f的原型是很重要的,否则编译器就无法检查f的类型是否与pf所指向的类型一致. 初始化表达式中的&操作符是可选的,因为函数名被使用时总是由编译器把它转换为函数指针.&am

函数指针,回调函数

函数指针的定义:返回值类型 ( * 指针变量名) (形参列表); 1:"返回值类型"说明函数的返回类型,"(指针变量名 )"中的括号不能省,括号改变了运算符的优先级.若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的"形参列表"表示指针变量指向的函数所带的参数列表. int func(int x); /* 声明一个函数 */ int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func

函数指针、回调函数、系统调用区别

函数指针.回调函数.系统调用区别1.函数指针 1 int add(int a, int b) 2 { 3 return a+b; 4 } 5 6 int (*fp)(int,int); 7 8 int main() 9 { 10 int c; 11 fp = add; //有指针赋值操作,静态绑定 12 c = fp(2,4); 13 printf("c = %d\n",c); 14 return 0; 15 } 2.回调函数 1 int add(int a, int b) //回调函

c++函数指针用于回调函数

#include "stdafx.h" typedef int (*func)(int,int);class data{public: data() { a=12; b=13; } ~data() { } static int setdata(int c,int d) { return c+d; } int a; int b;protected:private: };void test(func _func,void* _data){ data* mydata=(data*)_data

速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

[源码下载] 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函数返回值 可变函数 匿名函数 闭包函数 回调函数 示例1.函数的相关知识点 1(基础)function/function1.php <?php /** * 函数的相关知识点 1(基础) */ // 可以在相关的 function 声明语句之前调用该函数 f1(); function f1() { echo "f1"; echo "<br />"; } // 这里调用

函数指针与回调函数

一.函数指针 1.  函数指针就是一个指针变量,用来指向函数地址.正在运行的程序(进程)在内存中占据一定的空间.进程包括编译好的程序代码和需要使用的变量.因此,程序代码中的函数就是一些字符域,要得到一个函数地址,也就是得到这些字符域的起始地址. 2. 函数指针的三种形式:    指向普通C函数的函数指针 --- C语言中的函数指针    指向C++类静态成员函数的函数指针 --- C++    指向C++类非静态成员函数的函数指针 --- C++ 函数指针的本质自然也就是函数地址.  类成员函数