委托类与委托变量
系统自带委托
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lesson12_delegate
{
class Program
{
#region 知识一 委托是什么
#endregion
#region 知识二 基本语法 定义委托类
#endregion
#region 知识三 定义自定义委托类
delegate void MyAction();
public delegate int MyFunc(int a);
#endregion
#region 知识六 通常用法
class Test
{
public MyAction action = null;
public MyFunc func = null ;
public void TestFun(MyAction act, MyFunc fc)
{
this.action = act;
this.func = fc;
}
public void AddFun(MyAction act, MyFunc fc)
{
this.action += act;
this.func += fc;
}
public void RemoveFun(MyAction act, MyFunc fc)
{
this.action -= act;
this.func -= fc;
}
}
#endregion
static void Main(string[] args)
{
Console.WriteLine("委托的使用");
#region 知识四 使用自定义委托类(定义委托变量)
MyAction action = new MyAction(TargetFun);
Console.WriteLine("处理事情 1 2 3 4 5 ");
Console.WriteLine("调用 委托变量中装载的 函数(Fun) ");
action.Invoke();
MyAction action2 = TargetFun;
Console.WriteLine("处理事情 10 20 30 40 50 ");
action2();
#endregion
#region 知识五 有参有返回的
MyFunc func1 = new MyFunc(TargetFun2);
int ret = func1.Invoke(888);
Console.WriteLine("函数返回值" + ret);
#endregion
Console.WriteLine("------------------类中 委托变量 【增加】装载函数");
Test t = new Test();
t.TestFun(TargetFun, TargetFun2);
t.AddFun(TargetFun, TargetFun3);
Console.WriteLine("+>委托变量 Invoke 无参无返回");
t.action.Invoke();
Console.WriteLine("+>委托变量 Invoke 有参有返回");
t.func.Invoke(50);
Console.WriteLine("------------------类中 委托变量 【减少】 装载函数");
t.RemoveFun(TargetFun, TargetFun2);
Console.WriteLine("+>委托变量 Invoke 无参无返回");
t.action.Invoke();
Console.WriteLine("+>委托变量 Invoke 有参有返回");
t.func.Invoke(100);
#region 知识七 委托变量可以存储多个函数
Console.WriteLine("------------------委托变量 装载多个函数");
Console.WriteLine("+>委托变量 装载TargetFun2 ");
Console.WriteLine("+> 委托变量 装载TargetFun3 ");
MyFunc func3 = TargetFun2;
func3 += TargetFun3;
Console.WriteLine("--委托变量 Invoke");
func3.Invoke(55);
func3 -= TargetFun3;
func3 -= TargetFun3;
func3.Invoke(60);
func3 = null;
if (func3 != null)
{
func3.Invoke(65);
}
#endregion
#region 知识八 系统定义好的委托
Console.WriteLine("----------------------------系统提供 委托类型 ");
Action sysAction = TargetFun;
sysAction.Invoke();
Action<string> sysAction2 = new Action<string>(TargetFun1);
sysAction2.Invoke("sysAction2");
Func<string, int> sysFunc = new Func<string, int>(TargetFun4);
Console.WriteLine("sysFunc 的输出:" + sysFunc.Invoke("sysFunc"));
#endregion
Console.ReadLine();
}
static void TargetFun()
{
Console.WriteLine("----TargetFun调用无参无返回函数。");
}
static void TargetFun1(string strInput)
{
Console.WriteLine("----TargetFun1 调用有参无返回函数 输入:" + strInput);
}
static int TargetFun2(int value)
{
Console.WriteLine("----TargetFun2调用 有参有返回函数。" + value.ToString());
return 200;
}
static int TargetFun3(int value)
{
Console.WriteLine("----TargetFun3调用 有参有返回函数。" + value.ToString());
return 300;
}
static int TargetFun4(string value)
{
Console.WriteLine("----TargetFun4调用 有参有返回函数, 输入:" + value);
return 400;
}
}
}