一、委托概念
委托基本语法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ClassAndstance
{
public delegate void DelSayHi(string name);
internal class Program
{
static void Main(string[] args)
{
Test("张三", SayHiChinese);
}
public static void Test(string name,DelSayHi del)
{
del(name);
}
public static void SayHiChinese(string name)
{
Console.WriteLine("你好"+name);
Console.ReadKey();
}
public static void SayHiEnglish(string name)
{
Console.WriteLine("hello" + name);
Console.ReadKey();
}
}
}
二、匿名函数(当方法就执行一次的时候可以考虑用匿名函数解决)
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ClassAndstance
{
public delegate void DelSayHi(string name);
internal class Program
{
static void Main(string[] args)
{
Test("张三", delegate (string name)
{
Console.WriteLine("你好" + name);
Console.ReadKey();
}
);
}
public static void Test(string name,DelSayHi del)
{
del(name);
}
}
}
再整理一下
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ClassAndstance
{
public delegate void DelSayHi(string name);
internal class Program
{
static void Main(string[] args)
{
DelSayHi del = delegate (string name)
{
Console.WriteLine("你好", name);
Console.ReadKey();
};
del("张三");
}
}
}
三、lamda表达式
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ClassAndstance
{
public delegate void DelSayHi(string name);
internal class Program
{
static void Main(string[] args)
{
Test("张三", (name)=>{Console.WriteLine("你好"+name);});
}
public static void Test(string name,DelSayHi del)
{
del(name);
}
}
}
五、泛型委托
六、多播委托
七、Action: 一个指向无返回值的方法,参数列表(可有可无)最多可以有16个
Action action;
public delegate void Action();
Action action = new Action();
上面两段代码实现的效果是一样的。如果想实现带参数可以
Action<int int> action;//需要几个填几个
调用三种方式(括号里填参数,没有参数不填)
action.Invoke(1,2);
action(1,2);
异步调用
action.BeginInvoke(1,3, null, null);
具体实现
Action<string>action = (name) => { Console.WriteLine(name + "asdf"); };
八、Func:一个指向有返回值的方法,参数列表(可有可无)最多可以有16个
Func<int,int,int> func;
func<参数,参数,返回值类型>