public delegate bool MyDelegate(int a, int b);
class Program
{
static void Main(string[] args)
{
int[] array = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
//匿名委托
//匿名委托只能作为委托的值被使用
//缺陷
//匿名委托可读性差,建议匿名委托语句行数不宜过多,一句最佳
//匿名委托不可复用(违背封装原则)
//delegate (参数) {函数体}
MyDelegate condition = delegate (int a, int b)
{
return a > b;
};
Sort(array, condition);
foreach (var item in array)
{
Console.Write(item + " ");
}
Console.WriteLine();
Sort(array, condition = delegate (int a, int b) { return a < b; });
foreach (var item in array)
{
Console.Write(item + " ");
}
Console.WriteLine();
//lambert表达式(匿名委托的进一步简写)
//lambert表达式只能作为委托的值被使用
//缺陷
//lambert表达式可读性差,建议匿名委托语句行数不宜过多,一句最佳
//lambert表达式不可复用(违背封装原则)
//lambert表达式可以让你不适用类型
//lambert表达式如果函数体只有一句语句,可以省略花括号,不写return,不写分号;
//lambert表达式在参数只有一个的情况下可以不用括号
//(参数)=> {函数体}
Sort(array, (int a, int b) => { return a > b; });
foreach (var item in array)
{
Console.Write(item + " ");
}
Console.WriteLine();
Sort(array, (a, b) => a < b);
foreach (var item in array)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
static void Sort(int[] array, MyDelegate condition)
{
//外层循环Length-1次
for (int i = 0; i < array.Length; i++)
{
//内层循环Length-1-i(外层循环的当前次数)
for (int j = 0; j < array.Length - 1 - i; j++)
{
//如果条件(大)达成,交换位置
if (condition(array[j], array[j + 1]))
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
static bool Max(int a, int b)
{
return a > b;
}
static bool Min(int a, int b)
{
return a < b;
}
}
lambert表达式实例源码(匿名委托的进一步简写)
最新推荐文章于 2023-11-22 14:40:14 发布