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