系统委托:
两种方式:一种由返回值Fun<args>,一种是没有返回值的Action<args>
Action<>主要应用多线程
Func<>主要应用扩展方法
Action 参数全部是输入类型有17种方法重载,只是参数数量区别;
Func 是带有一个输出 参数而且只有一个,也有17个方法重载。
****************************************************************************************************************************************************案例分析**************************************************************
class Program
{
static void Main(string[] args)
{
Func<int, int, double> myFunc = Add;
Console.WriteLine("myFunc(5,6)=" + myFunc(5, 6));
Test();
Test1();
Test2();
Test3();
Console.Read();
}
//基本使用
private static double Add(int a, int b)
{
return a + b;
}
//重要使用
// {10, 9, 8, 7, 6, 5, 4, 3, 2}数组,从数组中指定位置抽取3个数,求和,求积
static int Sum(int [] nums,int from,int to)
{
int result = 0;
for (int i=from;i<=to;i++)
{
result += nums[i];
}
return result;
}
static int Mul(int[] nums,int from,int to)
{
int result = 1;
for (int i = from; i <= to; i++)
{
result *= nums[i];
}
return result;
}
static void Test()
{
int[] nums = { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
Console.WriteLine("求和"+ Sum(nums,0,2));
Console.WriteLine("求积"+ Mul(nums,0,2));
}
static int Add2(int a, int b)
{
return a + b;
}
static int Multiply2(int a,int b)
{
return a * b;
}
static int Operation(Func<int,int,int> method,int[] nums,int from,int to)
{
int result = nums[from];
for (int i = from+1; i <=to; i++)
{
result = method(result,nums[i]);
}
return result;
}
static void Test1()
{
int[] nums = { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
Console.WriteLine("方法作为参数:"+Operation(Add2,nums,0,2));
Console.WriteLine("方法作为参数:" + Operation(Multiply2, nums, 0, 2));
}
//简化用lambda表达式
static void Test2()
{
int[] nums = { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
Console.WriteLine("lambda表达式"+ Operation((a,b)=>a+b,nums,0,2));
Console.WriteLine("lambda表达式"+Operation((a,b)=>a*b,nums,0,2));
}
static void Test3()
{
Action action = () => Console.WriteLine("你好!");
action();
Action<string> action1 = (str) => Console.WriteLine(str);
action1("hello");
}
}
综述。Lambda为了简化代码,或使用一次时方便。系统委托,减少声明,直接使用。自定义泛型,可以一次声明委托类型,通过变更T来变化参数类型。
*************************************《完》**************************************************************