委托、 Lambda表达式和事件——委托
- 简单示例
1 /* 2 * 由SharpDevelop创建。 3 * 用户: David Huang 4 * 日期: 2015/7/27 5 * 时间: 10:22 6 */ 7 using System; 8 9 namespace Delegate_Book 10 { 11 class Program 12 { 13 delegate string GetAString(); 14 15 struct Currency 16 { 17 public uint Dollars; 18 public ushort Cents; 19 20 public Currency(uint Dollars,ushort Cents) 21 { 22 this.Dollars=Dollars; 23 this.Cents=Cents; 24 } 25 26 public override string ToString() 27 { 28 return string.Format("${0}.{1,2:00}",Dollars,Cents); 29 } 30 31 public static string GetCurrencyUnit() 32 { 33 return "Dollar"; 34 } 35 } 36 37 public static void Main(string[] args) 38 { 39 const int x = 5; 40 //GetAString getAString =new GetAString(x.ToString); 41 GetAString getAString=x.ToString; 42 Console.WriteLine(getAString()); 43 44 Currency currency=new Currency(50,60); 45 getAString=currency.ToString; 46 Console.WriteLine(getAString()); 47 48 Console.WriteLine(new GetAString(new Currency(50,50).ToString)()); 49 50 getAString=Currency.GetCurrencyUnit; 51 Console.WriteLine(getAString()); 52 53 54 Console.Write("Press any key to continue . . . "); 55 Console.ReadKey(true); 56 } 57 } 58 }
- Action<T>和Func<T>委 托
1 /* 2 * 由SharpDevelop创建。 3 * 用户: David Huang 4 * 日期: 2015/7/28 5 * 时间: 14:31 6 */ 7 using System; 8 9 namespace MathOperations 10 { 11 static class MathOperations 12 { 13 public static double MutiplyByTwo(double value) 14 { 15 return 2*value; 16 } 17 18 public static double Square(double value) 19 { 20 return value*value; 21 } 22 } 23 24 delegate double DoubleOp(double x); 25 26 class Program 27 { 28 29 public static void Main(string[] args) 30 { 31 DoubleOp[] doubleOps={ 32 MathOperations.MutiplyByTwo, 33 MathOperations.Square 34 }; 35 36 foreach (var op in doubleOps) { 37 DoTheMath(op,2.5); 38 DoTheMath(op,3.5); 39 } 40 41 Func<double,double>[] doubleFuncs={ 42 MathOperations.MutiplyByTwo, 43 MathOperations.Square 44 }; 45 46 foreach (var func in doubleFuncs) { 47 DoTheFunc(func,2.5); 48 DoTheFunc(func,3.5); 49 } 50 51 Console.Write("Press any key to continue . . . "); 52 Console.ReadKey(true); 53 } 54 55 static void DoTheMath(DoubleOp operation,double value) 56 { 57 double result=operation(value); 58 Console.WriteLine(string.Format("vlaue is {0},result is {1}",value,result)); 59 } 60 61 static void DoTheFunc(Func<double,double> func,double value) 62 { 63 var result = func(value); 64 Console.WriteLine(string.Format("value is {0},result is {1}",value,result)); 65 } 66 67 } 68 }
- 冒泡排序示例
1 /* 2 * 由SharpDevelop创建。 3 * 用户: David Huang 4 * 日期: 2015/7/29 5 * 时间: 15:34 6 */ 7 using System; 8 using System.Linq; 9 using System.Collections.Generic; 10 11 namespace BubbleSorter 12 { 13 class Program 14 { 15 public static void Main(string[] args) 16 { 17 //int 18 List<int> array=new List<int> {5,2,4,6,1}; 19 Sort(array); 20 Console.WriteLine(array.ConvertAll(i=>i.ToString()).Aggregate((current,next)=>string.Format("{0},{1}",current,next)).TrimEnd(',')); 21 22 //泛型 23 List<int> list=new List<int> {5,2,4,6,1}; 24 Sort(list,IsBiggerThan); 25 Console.WriteLine(array.ConvertAll(i=>i.ToString()).Aggregate((current,next)=>string.Format("{0},{1}",current,next)).TrimEnd(',')); 26 27 //泛型 28 List<Person> personList=new List<Person>{ 29 new Person{Name="Tom",Age=4}, 30 new Person{Name="Jack",Age=2}, 31 new Person{Name="Penny",Age=3}, 32 new Person{Name="Lucy",Age=5} 33 }; 34 Sort(personList,IsOlderThan); 35 foreach (Person person in personList) { 36 Console.WriteLine(person); 37 } 38 39 40 Console.Write("Press any key to continue . . . "); 41 Console.ReadKey(true); 42 } 43 44 static bool IsOlderThan(Person p1,Person p2) 45 { 46 return p1.Age>p2.Age; 47 } 48 49 static bool IsBiggerThan(int a,int b) 50 { 51 return a>b; 52 } 53 54 static void Sort(IList<int> sortArray) 55 { 56 bool swapped=true; 57 58 do 59 { 60 swapped=false; 61 62 for (int i = 0; i < sortArray.Count-1; i++) { 63 if (sortArray[i]>sortArray[i+1]) { 64 int tmp=sortArray[i]; 65 sortArray[i]=sortArray[i+1]; 66 sortArray[i+1]=tmp; 67 swapped=true; 68 } 69 } 70 71 }while (swapped); 72 } 73 74 static void Sort<T>(IList<T> list,Func<T,T,bool> comparison) 75 { 76 bool swapped=true; 77 78 do{ 79 swapped=false; 80 81 for (int i = 0; i < list.Count-1; i++) { 82 if (comparison(list[i],list[i+1])) { 83 T temp=list[i]; 84 list[i]=list[i+1]; 85 list[i+1]=temp; 86 swapped=true; 87 } 88 } 89 90 }while(swapped); 91 } 92 } 93 94 class Person 95 { 96 public string Name{get;set;} 97 public int Age{get;set;} 98 99 public override string ToString() 100 { 101 return string.Format("Name:{0},Age:{1}",Name,Age); 102 } 103 } 104 }
- 多播委托
1 /* 2 * 由SharpDevelop创建。 3 * 用户: David Huang 4 * 日期: 2015/7/30 5 * 时间: 14:37 6 */ 7 using System; 8 9 namespace 多播 10 { 11 public static class MathOperations 12 { 13 public static void MutiplyByTwo(double value) 14 { 15 Console.WriteLine(string.Format("method: MutiplyByTwo, value: {0}, result: {1}",value,2*value)); 16 } 17 18 public static void Square(double value) 19 { 20 Console.WriteLine(string.Format("method: Square, value: {0}, result: {1}",value,value*value)); 21 } 22 } 23 24 class Program 25 { 26 public static void Main(string[] args) 27 { 28 Action<double> mathOperations=MathOperations.MutiplyByTwo; 29 mathOperations+=MathOperations.Square; 30 31 DoTheMath(mathOperations,2.5); 32 DoTheMath(mathOperations,3.5); 33 34 Console.Write("Press any key to continue . . . "); 35 Console.ReadKey(true); 36 } 37 38 static void DoTheMath(Action<double> action,double value) 39 { 40 action(value); 41 } 42 } 43 }
- 匿名委托
1 /* 2 * 由SharpDevelop创建。 3 * 用户: David Huang 4 * 日期: 2015/7/30 5 * 时间: 16:19 6 */ 7 using System; 8 9 namespace 匿名 10 { 11 class Program 12 { 13 public static void Main(string[] args) 14 { 15 Func<int,int> anonDel=delegate(int i) 16 { 17 return i*2; 18 }; 19 20 21 Console.WriteLine(anonDel(4)); 22 // TODO: Implement Functionality Here 23 24 Console.Write("Press any key to continue . . . "); 25 Console.ReadKey(true); 26 } 27 } 28 }