• 委托、 Lambda表达式和事件——委托


    1. 简单示例
       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 }
    2. 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 }
    3. 冒泡排序示例
        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 }
    4. 多播委托
       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 }
    5. 匿名委托
       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 }
  • 相关阅读:
    json schema相关
    好看的记录片和电影
    java函数局部变量的坑(非常隐藏)
    maven操作
    Js数组的常用的方法概述
    深入理解JS各种this指向问题
    浅谈ES5和ES6继承和区别
    vue
    使用 vue-i18n 切换中英文
    js_数组对象的浅克隆
  • 原文地址:https://www.cnblogs.com/David-Huang/p/4689687.html
Copyright © 2020-2023  润新知