《C#本质论》读书笔记(12)委托和Lambda表达式
Posted 【唐】三三
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《C#本质论》读书笔记(12)委托和Lambda表达式相关的知识,希望对你有一定的参考价值。
12.1.委托概述
12.1.2 委托的数据类型
class DelegateSample
{
static void Main(string[] args)
{
//int[] arr = { 10, 20, 30, 40, 50 };
int[] arr = { 50, 40, 30, 20, 10 };
ConsoleArr(arr);
ComparisonHandler wx = new ComparisonHandler(DelegateSample.IsTrue);
BubbleSort(arr, wx);
- //C#2.0之前是这么写的
- //BubbleSort(arr, new ComparisonHandler(IsTrue));
ConsoleArr(arr);
Console.Read();
}
public delegate bool ComparisonHandler(int a, int b);
public static bool IsTrue(int a, int b)
{
return a > b;
}
public static void BubbleSort(int[] items, ComparisonHandler comparisonMethod)
{
int i;
int j;
int temp;
if (items == null)
{
return;
}
if (comparisonMethod == null)
{
throw new ArgumentNullException("comparisonMethod");
}
for (i = items.Length - 1; i >= 0; i--)
{
for (j = 1; j <= i; j++)
{
if (comparisonMethod(items[j - 1], items[j]))
{
temp = items[j - 1];
items[j - 1] = items[j];
items[j] = temp;
}
}
}
}
public static void ConsoleArr(int[] arr)
{
foreach (var item in arr)
{
Console.Write(item+",");
}
Console.WriteLine();
}
}
public static bool AlphabeticalIsTrue(int a,int b)
{
int comparison;
comparison = (a.ToString().CompareTo(b.ToString()));
return comparison > 0;
}
//C# 2.0以后直接传递方法
BubbleSort(arr, AlphabeticalIsTrue);
12.1.3 委托内部机制
// 摘要:
// 初始化一个委托,该委托对指定的类实例调用指定的实例方法。
//
// 参数:
// target:
// 类实例,委托对其调用 method。
//
// method:
// 委托表示的实例方法的名称。
//
// 异常:
// System.ArgumentNullException:
// target 为 null。 - 或 - method 为 null。
//
// System.ArgumentException:
// 绑定到目标方法时出错。
[SecuritySafeCritical]
protected Delegate(object target, string method);
//
// 摘要:
// 初始化一个委托,该委托从指定的类调用指定的静态方法。
//
// 参数:
// target:
// System.Type,它表示定义 method 的类。
//
// method:
// 委托表示的静态方法的名称。
//
// 异常:
// System.ArgumentNullException:
// target 为 null。 - 或 - method 为 null。
//
// System.ArgumentException:
// target 不是 RuntimeType。 请参见 反射中的运行时类型。 - 或 - target 表示开放式泛型类型。
[SecuritySafeCritical]
protected Delegate(Type target, string method);
12.2.匿名方法
class Program
{
public delegate bool ComparisonHandler(int a, int b);
static void Main(string[] args)
{
int i;
int[] items = new int[5];
ComparisonHandler comparionMethod;
for (i = 0; i < items.Length; i++)
{
Console.WriteLine("Enter an integer:");
items[i] = int.Parse(Console.ReadLine());
}
comparionMethod = delegate(int first, int second)
{
return first < second;
};
BubbleSort(items, comparionMethod);
- 《C#高级编程》读书笔记:委托