1、匿名函数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace weituo
{
//声明定义一个委托类型 委托类型必须与方法有相同的签名
public delegate string DelUpdate(string name);
class Program
{
static void Main(string[] args)
{
string[] names = {"abCD","HJidsfs","JDUiJSfjbfFJD"};
#region 匿名函数 当方法只执行一次时,使用匿名函数
//匿名函数的签名 也得与声明一样
ProStr(names, delegate(string name)
{
return name.ToUpper();
});
#endregion
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine(names[i]);
}
Console.ReadKey();
}
public static void ProStr(string[] names,DelUpdate del)
{
for (int i = 0; i < names.Length; i++)
{
names[i] = del(names[i]);
}
}
}
}
2、委托的演变
#region 匿名方法
//DelSayHello del = delegate(string name)
//{
// Console.WriteLine(name + "你好");
//};
//del("张三");
#endregion
#region lamda表达式
DelSayHello del = (string name) => { Console.WriteLine(name + "你好"); };
del("你好");
#endregion
3、自定义泛型委托
namespace GetArrayMax
{
public delegate int DelCompare<T>(T o1,T o2);
class Program
{
static void Main(string[] args)
{
//求数组最大值
string[] strArray = {"121","436hfgn","rfdds","645iuytjhgf" };
int[] intArray = { 1, 2, 3, 5, 2, 67, 423, 87, 8 };
//object s = GetMax(intArray, CompareStr2);
//string s = GetMax<string>(strArray,(string s1,string s2)=>{return s1.Length-s2.Length;});
int max = GetMax<int>(intArray, (int a, int b) => { return a - b; });
Console.WriteLine(max);
Console.ReadKey();
}
public static T GetMax<T>(T[] arr,DelCompare<T> del)
{
T max=arr[0];
for (int i = 0; i < arr.Length; i++)
{
if (del(max, arr[i]) < 0)
{
max = arr[i];
}
}
return max;
}
}
}