委托:委托是一种数据类型,委托代表的是【一类静态(返回值与参数列表相同的)】方法,调用委托就是调用这个静态方法
定义委托:delegate void HandlerDelegateTest();
(定义委托 习惯上 委托名 以Handler开头或结尾,看到Handler 就代表是委托 行业规定、习惯)
声明初始化并绑定方法 delegateTest dele = new delegateTest(Test); 绑定Test(静态)方法
调用委托 delegateTest(); ====>>>就是调用了Test方法
public static void Test(){}
委托:单播委托、多播委托(不适合委托有返回值的方法,只会返回最后绑定的方法返回值)
class Program
{
//*****************调用端
static void Main(string[] args)
{
//初始化委托 并绑定方法(在本类中,则直接方法名就可以):有四种方法
//HandlerDelegateTest dele = new HandlerDelegateTest(Test);//第一种:等价于下面的代码
HandlerDelegateTest dele = Test;//第二种:等号右边 表示委托的对象 相当于第一种的简化版
//第三种 匿名方法 直接给委托绑定 方法对象(等号右边 表示委托的对象)
// 适用于:功能简单少量代码可以完成,且该功能不需要在其它地方复用
HandlerDelegateTest dele2 = delegate ()
{
Console.WriteLine("匿名方法委托");
};
dele2();
//第四种 Lambda表达式语法:
// 委托类型委托对象名 = Lambda表达式;
// 写法一: (参数)=>{ 语句} ; 标志格式(注意 => 叫做 goto)
// 简化写法二: 一个参数 => 一行代码; 可以省略小括号 与大括号
// 适用于:Lambda表达式,适合于:功能代码超简单,一行代码可以完成
// 声明委托 =右边 Lambda表达式 无参的() 委托对象 ()=> Console.WriteLine("Lambda表达式委托")
HandlerDelegateTest dele3 = () => { Console.WriteLine("Lambda表达式委托"); };
dele3();//调用
//初始化(Lambda表达式 委托)
OneHandler oneDelegate = a =>Console.WriteLine("一个参数的Lambda表达式"+a);
oneDelegate += a => Console.WriteLine("Lambda表达式" + a);//多播委托
oneDelegate(2);//调用
//调用委托 就是调用了绑定的方法
dele();
//声明并初始化委托 并绑定方法(别的类中的方法,则类名点方法名)
// 单播委托:一个委托绑定一个方法
CalculateHandler cal = new CalculateHandler(TwoNumberAdd.Calculate);
// 多播委托:一个委托绑定多个方法(其中每个方法都会执行,根据绑定顺序依次执行,但只会返回最后绑定的方法值)
cal = cal + new CalculateHandler(TwoNumberAdd.Calculate2);
// 调用委托 就是调用了绑定的方法
//先调用 绑定的Calculate方法,然后调用Calculate2方法,并返回该方法的值(也可以理解将前面方法返回的结果覆盖掉了,实际是不会返回前面的)
Console.WriteLine(cal(1, 2));
}
public static void Test()
{
Console.WriteLine("通过委托 调用了这个方法");
}
}
//*****************定义端
/// <summary>
/// 两数相加的类:测试委托绑定其余类中的方法
/// </summary>
class TwoNumberAdd
{
/// <summary>
/// 计算两数相加
/// </summary>
/// <param name="num1"></param>
/// <param name="num2"></param>
/// <returns></returns>
public static int Calculate(int num1, int num2)
{
return num1 + num2;
}
public static int Calculate2(int num1, int num2)
{
return num1 * num2;
}
}
/// <summary>
/// 委托 返回值类型int 两个参数
/// </summary>
/// <param name="num1"></param>
/// <param name="num2"></param>
/// <returns></returns>
delegate int CalculateHandler(int num1, int num2);
/// <summary>
/// 定义委托
/// </summary>
delegate void HandlerDelegateTest();
delegate void OneHandler(int a);
1273

被折叠的 条评论
为什么被折叠?



