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


    委托

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

  • 相关阅读:
    CSS选择器
    基础DOS命令
    超链接a标签
    vscode使用技巧
    pc端页面添加meta标签:X-UA-Compatible meta标签
    提问的智慧
    Zepto核心模块源代码分析
    远程调试工具weinre使用教程
    HTML标签marquee实现滚动效果
    git 学习教程
  • 原文地址:https://www.cnblogs.com/lv-sally/p/4496409.html
Copyright © 2020-2023  润新知