c#回调函数的使用精简实例

在我看来,回调函数就是将一个类中【无法从外界访问的方法】传递到另一个类中,实现该【无法从外界访问的方法】的顺利执行。方法中的参数传递如果是基本类型如 【字符串s、整数i】的话,会很简单,只需要直接输入【function(s)或function(i)】即可,但方法体的传递对于初学者而言则摸不着头脑,其实只需要使用泛型【Action<>】即可像基本类型一样传递了,如【function(Action callBack)】

下面是在同一个类中实现回调:

创建控制台应用;

Program.class:

using System;
using System.Threading;
namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            TestCallBack(CallBack);
        }

        private static void CallBack(string s)
        {
            Console.WriteLine(s);
            Console.ReadLine();
        }
        public static void TestCallBack(Action what)
        {
            Console.WriteLine("开始");
            Thread.Sleep(2000);
            what("233");
        }
    }
}

该类中包含CallBack(string s)方法,执行了输出字符串s的内容、以及包含了TestCallBack(Action what)方法,执行了输出“开始”内容后,延时2秒后,执行参数what()方法,并向参数方法what()中传入字符串“233”。

输出内容:

开始
233
-----------------------------------------------------------------------------------------------------------------

回调同一个类中的方法可能会觉得很容易理解,原理都是利用Action<>xxx进行方法的传递,但如果拆分开来,放在不同的两个类中,可能就会有点晕了,下面是将回调函数放在了program类中,而调用回调函数的方法放在class1中:

Program.class:

using System;
namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 c = new Class1();
            c.TestCallBack(CallBack);
        }

        private static void CallBack(string s)
        {
            Console.WriteLine(s);
            Console.ReadLine();
        }
    }
}

Program.class中的main函数调用了Class1类中的TestCallBack()方法,并传入了Program中的CallBack()方法;

Class1.class:

using System;
using System.Threading;

namespace ConsoleApp4
{
    class Class1
    {
        public void TestCallBack(Action what)
        {
            Console.WriteLine("开始");
            Thread.Sleep(2000);
            what("233");
        }
    }
}

Class1.class中的TestCallBack()方法接受了一个参数方法体,【参数方法体】中的参数类型为string;TestCallBack()方法先在控制台输出“开始”,延时2秒后调用参数方法体,并传入“233”。

输出内容:

开始
233


你可能感兴趣的:(c#)