自定义委托
//委托方法
public static int Add(int a, int b)
{
return a + b;
}
//委托方法的定义
delegate int AddDelegate(int a, int b);
//委托初始化(方法名)
AddDelegate addDelegate = new AddDelegate(Add);
//委托的调用(方法参数)
int c = AddDelegate.Invoke(3, 4);
代码
using System;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleApp2
{
class Program
{
class Class1
{
static void Main(string[] args)
{
AddDelegate AddDelegate = new AddDelegate(Add);
int c = AddDelegate.Invoke(3, 4);
Console.WriteLine(c);
}
public static int Add(int a, int b)
{
int c = a + b;
return c;
}
}
delegate int AddDelegate(int a, int b);
}
}
泛型委托
解决代码重用,写出通用委托
//泛型委托方法
public static void WXKINT(int a ,int b)
{
int c = a + b;
Console.WriteLine(c);
}
public static void WXKDOUBLE(double a, double b)
{
double c = a + b;
Console.WriteLine(c);
}
//泛型委托的定义
delegate void WXKDelegate<T>(T a, T b);
//委托初始化(方法名)
WXKDelegate <int> wXKDelegate = new WXKDelegate<int>(WXKINT);
//委托的调用(方法参数)
wXKDelegate(2, 5);//调运委托可以不加Invoke
代码
using System;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleApp2
{
class Program
{
class Class1
{
static void Main(string[] args)
{
WXKDelegate <int> wXKDelegate = new WXKDelegate<int>(WXKINT);
wXKDelegate(2, 5);//调运委托可以不加Invoke
}
public static void WXKINT(int a ,int b)
{
int c = a + b;
Console.WriteLine(c);
}
public static void WXKDOUBLE(double a, double b)
{
double c = a + b;
Console.WriteLine(c);
}
}
delegate void WXKDelegate<T>(T a, T b);
}
}
预定义委托
不需要定义委托
//委托方法
public static void Show(string a ,int num)
{
Console.WriteLine(a);
}
public static void SHOW2(int a,int b,int c)
{
Console.WriteLine(c);
}
public static string SHOW3()
{
return "有返回值";
}
public static int SHOW4(int a)
{
return a;
}
//委托不需定义
//委托初始化和调用(方法名)
//无返回值
Action<string, int> action = new Action<string, int>(Show);
action("无返回值",1);
Action<int, int,int> action2 = new Action<int,int,int>(SHOW2);
action2(1,2,3);
//有返回值
Func<string> func1 = new Func<string>(SHOW3);
Console.WriteLine(func1());
Func<int, int> func2 = new Func<int, int>(SHOW4);
Console.WriteLine(func2(111));
代码
using System;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleApp2
{
class Program
{
class Class1
{
static void Main(string[] args)
{
//无返回值
Action<string, int> action = new Action<string, int>(Show);
action("无返回值",1);
Action<int, int,int> action2 = new Action<int,int,int>(SHOW2);
action2(1,2,3);
//有返回值
Func<string> func1 = new Func<string>(SHOW3);
Console.WriteLine(func1());
Func<int, int> func2 = new Func<int, int>(SHOW4);
Console.WriteLine(func2(111));
Console.ReadKey();
}
public static string SHOW3()
{
return "有返回值";
}
public static int SHOW4(int a)
{
return a;
}
public static void Show(string a ,int num)
{
Console.WriteLine(a);
}
public static void SHOW2(int a,int b,int c)
{
Console.WriteLine(c);
}
}
}
}
lambda
本质是匿名方法 ,让我们更快更简单完成委托,还可以让实例化委托的方法访问局部变量
起初代码是这样
//最初是这种复杂分开写
Action<string> action = new Action<string>(Show);
action("我是泛型委托Action");
//还要在下面写委托方法
public static void Show(string a)
{
Console.WriteLine(a);
}
第一步演变
//使用匿名方法
Action<string> action2 = new Action<string>(delegate (string msg)
{
Console.WriteLine(msg);
});
action2("我是委托action,使用了匿名方法");
接下来更简单一下
//=>念成gose to
Action<string> action3 = new Action<string>( (string msg)=>
{
Console.WriteLine(msg);
});
action3("我是委托action,使用了匿名方法");
更简单的写下来
//一个参数 一个语句的方法
Action<string> action4 = new Action<string>((msg) => Console.WriteLine(msg));
action4("我是委托action,使用了匿名方法");
接下来就是lambda
//一个参数 一个语句的方法
Action action5 = new Action(() => Console.WriteLine("无返回值,无参数"));
action5();
//有返回值,单条语句 Func<string> func6 = new Func<string>(() => "有返回值,单条语句"); func6();
//有返回值,多条语句
Func<string> func7 = new Func<string>(() =>
{
Console.WriteLine("有返回值,多条语句");
Console.WriteLine("有返回值,多条语句");
Console.WriteLine("有返回值,多条语句");
Console.WriteLine("有返回值,多条语句");
return "有返回值,多条语句";
});
func7();
代码:
using System;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleApp2
{
class Program
{
class Class1
{
static void Main(string[] args)
{
//最初是这种复杂分开写
Action<string> action = new Action<string>(Show);
action("我是泛型委托Action");
//使用匿名方法
Action<string> action2 = new Action<string>(delegate (string msg)
{
Console.WriteLine(msg);
});
action2("我是委托action,使用了匿名方法");
//=>念成gose to
Action<string> action3 = new Action<string>( (string msg)=>
{
Console.WriteLine(msg);
});
action3("我是委托action,使用了匿名方法");
//一个参数 一个语句的方法
Action<string> action4 = new Action<string>((msg) => Console.WriteLine(msg));
action4("我是委托action,使用了匿名方法");
//无返回值 无参数
//一个参数 一个语句的方法
Action action5 = new Action(() => Console.WriteLine("无返回值,无参数"));
action5();
//有返回值,单条语句
Func<string> func6 = new Func<string>(() => "有返回值,单条语句");
func6();
//有返回值,多条语句
Func<string> func7 = new Func<string>(() =>
{
Console.WriteLine("有返回值,多条语句");
Console.WriteLine("有返回值,多条语句");
Console.WriteLine("有返回值,多条语句");
Console.WriteLine("有返回值,多条语句");
return "有返回值,多条语句";
});
func7();
}
public static void Show(string a)
{
Console.WriteLine(a);
}
}
}
}
1031

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



