1. 简单示例

     /*
    * 由SharpDevelop创建。
    * 用户: David Huang
    * 日期: 2015/7/27
    * 时间: 10:22
    */
    using System; namespace Delegate_Book
    {
    class Program
    {
    delegate string GetAString(); struct Currency
    {
    public uint Dollars;
    public ushort Cents; public Currency(uint Dollars,ushort Cents)
    {
    this.Dollars=Dollars;
    this.Cents=Cents;
    } public override string ToString()
    {
    return string.Format("${0}.{1,2:00}",Dollars,Cents);
    } public static string GetCurrencyUnit()
    {
    return "Dollar";
    }
    } public static void Main(string[] args)
    {
    const int x = ;
    //GetAString getAString =new GetAString(x.ToString);
    GetAString getAString=x.ToString;
    Console.WriteLine(getAString()); Currency currency=new Currency(,);
    getAString=currency.ToString;
    Console.WriteLine(getAString()); Console.WriteLine(new GetAString(new Currency(,).ToString)()); getAString=Currency.GetCurrencyUnit;
    Console.WriteLine(getAString()); Console.Write("Press any key to continue . . . ");
    Console.ReadKey(true);
    }
    }
    }
  2. Action<T>和Func<T>委 托
     /*
    * 由SharpDevelop创建。
    * 用户: David Huang
    * 日期: 2015/7/28
    * 时间: 14:31
    */
    using System; namespace MathOperations
    {
    static class MathOperations
    {
    public static double MutiplyByTwo(double value)
    {
    return *value;
    } public static double Square(double value)
    {
    return value*value;
    }
    } delegate double DoubleOp(double x); class Program
    { public static void Main(string[] args)
    {
    DoubleOp[] doubleOps={
    MathOperations.MutiplyByTwo,
    MathOperations.Square
    }; foreach (var op in doubleOps) {
    DoTheMath(op,2.5);
    DoTheMath(op,3.5);
    } Func<double,double>[] doubleFuncs={
    MathOperations.MutiplyByTwo,
    MathOperations.Square
    }; foreach (var func in doubleFuncs) {
    DoTheFunc(func,2.5);
    DoTheFunc(func,3.5);
    } Console.Write("Press any key to continue . . . ");
    Console.ReadKey(true);
    } static void DoTheMath(DoubleOp operation,double value)
    {
    double result=operation(value);
    Console.WriteLine(string.Format("vlaue is {0},result is {1}",value,result));
    } static void DoTheFunc(Func<double,double> func,double value)
    {
    var result = func(value);
    Console.WriteLine(string.Format("value is {0},result is {1}",value,result));
    } }
    }
  3. 冒泡排序示例
     /*
    * 由SharpDevelop创建。
    * 用户: David Huang
    * 日期: 2015/7/29
    * 时间: 15:34
    */
    using System;
    using System.Linq;
    using System.Collections.Generic; namespace BubbleSorter
    {
    class Program
    {
    public static void Main(string[] args)
    {
    //int
    List<int> array=new List<int> {,,,,};
    Sort(array);
    Console.WriteLine(array.ConvertAll(i=>i.ToString()).Aggregate((current,next)=>string.Format("{0},{1}",current,next)).TrimEnd(',')); //泛型
    List<int> list=new List<int> {,,,,};
    Sort(list,IsBiggerThan);
    Console.WriteLine(array.ConvertAll(i=>i.ToString()).Aggregate((current,next)=>string.Format("{0},{1}",current,next)).TrimEnd(',')); //泛型
    List<Person> personList=new List<Person>{
    new Person{Name="Tom",Age=},
    new Person{Name="Jack",Age=},
    new Person{Name="Penny",Age=},
    new Person{Name="Lucy",Age=}
    };
    Sort(personList,IsOlderThan);
    foreach (Person person in personList) {
    Console.WriteLine(person);
    } Console.Write("Press any key to continue . . . ");
    Console.ReadKey(true);
    } static bool IsOlderThan(Person p1,Person p2)
    {
    return p1.Age>p2.Age;
    } static bool IsBiggerThan(int a,int b)
    {
    return a>b;
    } static void Sort(IList<int> sortArray)
    {
    bool swapped=true; do
    {
    swapped=false; for (int i = ; i < sortArray.Count-; i++) {
    if (sortArray[i]>sortArray[i+]) {
    int tmp=sortArray[i];
    sortArray[i]=sortArray[i+];
    sortArray[i+]=tmp;
    swapped=true;
    }
    } }while (swapped);
    } static void Sort<T>(IList<T> list,Func<T,T,bool> comparison)
    {
    bool swapped=true; do{
    swapped=false; for (int i = ; i < list.Count-; i++) {
    if (comparison(list[i],list[i+])) {
    T temp=list[i];
    list[i]=list[i+];
    list[i+]=temp;
    swapped=true;
    }
    } }while(swapped);
    }
    } class Person
    {
    public string Name{get;set;}
    public int Age{get;set;} public override string ToString()
    {
    return string.Format("Name:{0},Age:{1}",Name,Age);
    }
    }
    }
  4. 多播委托
     /*
    * 由SharpDevelop创建。
    * 用户: David Huang
    * 日期: 2015/7/30
    * 时间: 14:37
    */
    using System; namespace 多播
    {
    public static class MathOperations
    {
    public static void MutiplyByTwo(double value)
    {
    Console.WriteLine(string.Format("method: MutiplyByTwo, value: {0}, result: {1}",value,*value));
    } public static void Square(double value)
    {
    Console.WriteLine(string.Format("method: Square, value: {0}, result: {1}",value,value*value));
    }
    } class Program
    {
    public static void Main(string[] args)
    {
    Action<double> mathOperations=MathOperations.MutiplyByTwo;
    mathOperations+=MathOperations.Square; DoTheMath(mathOperations,2.5);
    DoTheMath(mathOperations,3.5); Console.Write("Press any key to continue . . . ");
    Console.ReadKey(true);
    } static void DoTheMath(Action<double> action,double value)
    {
    action(value);
    }
    }
    }
  5. 匿名委托
     /*
    * 由SharpDevelop创建。
    * 用户: David Huang
    * 日期: 2015/7/30
    * 时间: 16:19
    */
    using System; namespace 匿名
    {
    class Program
    {
    public static void Main(string[] args)
    {
    Func<int,int> anonDel=delegate(int i)
    {
    return i*;
    }; Console.WriteLine(anonDel());
    // TODO: Implement Functionality Here Console.Write("Press any key to continue . . . ");
    Console.ReadKey(true);
    }
    }
    }

委托、 Lambda表达式和事件——委托的更多相关文章

  1. C#编程 委托 Lambda表达式和事件

    委托 如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字段和方 ...

  2. C#学习笔记三(委托·lambda表达式和事件,字符串和正则表达式,集合,特殊的集合)

    委托和事件的区别 序号 区别 委托 事件 1 是否可以使用=来赋值 是 否 2 是否可以在类外部进行调用 是 否 3 是否是一个类型 是 否,事件修饰的是一个对象 public delegate vo ...

  3. 委托、Lambda表达式、事件系列07,使用EventHandler委托

    谈到事件注册,EventHandler是最常用的. EventHandler是一个委托,接收2个形参.sender是指事件的发起者,e代表事件参数. □ 使用EventHandler实现猜拳游戏 使用 ...

  4. 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别

    在"实现观察者模式(Observer Pattern)的2种方式"中,曾经通过接口的方式.委托与事件的方式实现过观察者模式.本篇体验使用Action实现此模式,并从中体验委托与事件 ...

  5. 委托、Lambda表达式、事件系列05,Action委托与闭包

    来看使用Action委托的一个实例: static void Main(string[] args) { int i = 0; Action a = () => i++; a(); a(); C ...

  6. 委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理

    委托是多播委托,我们可以通过"+="把多个方法赋给委托变量,这样就形成了一个委托链.本篇的话题包括:委托链是怎样形成的,如何调用委托链方法,以及委托链异常处理. □ 调用返回类型为 ...

  7. 委托、Lambda表达式、事件系列03,从委托到Lamda表达式

    在"委托.Lambda表达式.事件系列02,什么时候该用委托"一文中,使用委托让代码简洁了不少. namespace ConsoleApplication2 { internal ...

  8. 委托、Lambda表达式、事件系列02,什么时候该用委托

    假设要找出整型集合中小于5的数. static void Main(string[] args) { IEnumerable<int> source = new List<int&g ...

  9. 委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性

    委托是一个类. namespace ConsoleApplication1 { internal delegate void MyDelegate(int val); class Program { ...

随机推荐

  1. 关于mysql授权账号权限时的空密码问题

    -root ~]$ mysql -uroot -p Enter password:ERROR 1045 (28000): Access denied for user ‘root’@'localhos ...

  2. javascript学习代码

    点击改变p和div元素: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  3. js optimization and performance

    http://www.codeproject.com/Articles/551733/Walkthrough-3aplusUsingplustheplusRequireJSplusOpt http:/ ...

  4. Lunch Time

    hdu4807:http://acm.hdu.edu.cn/showproblem.php?pid=4807 题意:给你n个点(0--n-1),点之间是有向边,0号点有k个人,现在0号点的k个人要到n ...

  5. 树莓派学习路程No.1 GPIO功能初识 wiringPi安装

    WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3.wiringPi使用C或者C++开发并且可以被其他语言包转,例如python.ruby或者PHP等.Wiri ...

  6. NBU是最牛逼的备份软件

    NBU是最牛逼的备份软件 TSM是IBM的备份   好好看看几个厂商 VERITAS 公司下的NBU入门级备份有BEHP的备份软件有DPIBM的是TSMCommvault也非常牛逼这都是做到了小机AI ...

  7. QT内置的ICON资源

    QT内置的ICON资源保存在QStyle类里. 可以通过成员函数 QStyle::standardIcon 来获取. 保存的icon有: enum QStyle::StandardPixmap Thi ...

  8. MonkeyRunner 连续两次点击报“Error sending touch event”

    最近用monkeyrunner做自动化测试,遇到连续两次点击,第二次点击就会报错“Error sending touch event”. 具体做法如下: device.touch(234,112, ' ...

  9. OA请假流程 -- 编码

    OA请假流程 -- 编码 凡是内容不会发生变化的,都要写在xml配置文件中.需要定义如下内容: <process>标签 id英文命名 和 name 中文命名,然后只要与该流程相关的资源均以 ...

  10. JSTL语法及参数

    转:http://blog.csdn.net/hakunamatata2008/article/details/3942812 JSTL语法及参数 JSTL包含以下的标签:     常用的标签:如&l ...