委托的定义:

    (1) 将方法作为变量使用的一种机制,就是将方法当作变量用(声明,赋值,传参)

      (2) 将变量当作方法来用,首先就要去声明变量,就要考虑变量的类型,就是(委托变量,对应方法的返回值,参数等),顾名思义:委托就是委托别人去干某些事情,下面是一个实例方法的实现 例如:我现在饿了,但是我很懒,就是不想出去买,所以这时候我可以委托室友帮我带一份,这样我就已经实现委托了

    

 class Program
{
//声明一个委托
delegate int DelegateCompare(object o1, object o2); delegate int DelegateTotal(int num1, int num2); static void Main(string[] args)
{ //比较两个整数
DelegateCompare del = intCompare; //简写
Console.WriteLine(del(, )); //比较两个字符的长度
del = new DelegateCompare(strLengthCompare); //完整写法
Console.WriteLine(del("", "admin")); del = PersonAgeCompare; //简写
Console.WriteLine(del(new Person("张三", ), new Person("李四", ))); /*-------------取最大值-----------*/
DelegateCompare delMax; delMax = intCompare; //整数
Console.WriteLine(GetMax(new object[] { , , , , , }, delMax)); delMax = strLengthCompare; //字符串长度
Console.WriteLine(GetMax(new object[] { "aa", "a", "aaa", "aaaa", "aaaaaaaa", "a" }, delMax)); delMax = PersonAgeCompare; //Person类的Age属性
Console.WriteLine(((Person)GetMax(new object[] { new Person("张三", ), new Person("李四", ), new Person("万物", ) }, delMax)).Name); /*----------匿名委托----------*/ //标准写法
DelegateCompare del2 = delegate(object o1, object o2) { return (int)o1 - (int)o2; };
Console.WriteLine("匿名委托" + del2(, ));
//lambda 表达式
DelegateCompare del3 = (object o1, object o2) => (int)o1 - (int)o2; //del3 同等于Del4
DelegateCompare del4 = (object o1, object o2) => { return (int)o1 - (int)o2; }; /*--------系统委托-----------*/ //lambda 表达式
string[] names = { "agen", "balen", "coure", "apple" };
string[] findNameA = Array.FindAll<string>(names, delegate(string v) { return v.StartsWith("a"); });
string[] findNameB = Array.FindAll<string>(names, v => v.StartsWith("a"));
Console.WriteLine(string.Join("-", findNameA));
Console.WriteLine(string.Join("-", findNameB));
       //泛型集合Int转String数组
List<int> intList = new List<int>() { 1, 23, 4, 5, 56, 6, 6, 76, 7, 7 };
string[] str_array = intList.ConvertAll<string>((int i) => i.ToString()).ToArray();  /*----------------多播委托----------*/
//多播委托一般情况下 要求没有返回值, 若有, 则返回最后一个方法的返回值
DelegateTotal delTotal = He;
delTotal += Cha;
delTotal += Ji;
Console.WriteLine(delTotal(, ));
Console.ReadKey();
} /// <summary>
/// 获取array最大值
/// </summary>
/// <param name="arr"></param>
/// <param name="del"></param>
/// <returns></returns>
static object GetMax(object[] arr, DelegateCompare del)
{
if (arr.Length > )
{
object _max = arr[];
for (int i = ; i < arr.Length; i++)
{
if (del(_max, arr[i]) < )
{
_max = arr[i];
}
}
return _max;
}
return null;
} /// <summary>
/// 比较两个Person类的Age属性 大于0 o1大 等于0 相等 小于0 o2大
/// </summary>
/// <param name="o1"></param>
/// <param name="o2"></param>
/// <returns></returns>
static int PersonAgeCompare(object o1, object o2)
{
return ((Person)o1).Age - ((Person)o2).Age;
} /// <summary>
/// 比较两个字符串的长度 大于0 o1大 等于0 相等 小于0 o2大
/// </summary>
/// <param name="o1"></param>
/// <param name="o2"></param>
/// <returns></returns>
static int strLengthCompare(object o1, object o2)
{
return o1.ToString().Length - o2.ToString().Length;
} /// <summary>
/// 比较两个数的大小 大于0 o1大 等于0 相等 小于0 o2大
/// </summary>
/// <param name="o1"></param>
/// <param name="o2"></param>
/// <returns></returns>
static int intCompare(object o1, object o2)
{
return (int)o1 - (int)o2;
} /// <summary>
/// 求和
/// </summary>
/// <param name="num1"></param>
/// <param name="num2"></param>
/// <returns></returns>
static int He(int num1, int num2)
{
Console.WriteLine("----求和----");
return num1 + num2;
}
/// <summary>
/// 求差
/// </summary>
/// <param name="num1"></param>
/// <param name="num2"></param>
/// <returns></returns>
static int Cha(int num1, int num2)
{
Console.WriteLine("----求差----");
return num1 - num2;
}
/// <summary>
/// 求积
/// </summary>
/// <param name="num1"></param>
/// <param name="num2"></param>
/// <returns></returns>
static int Ji(int num1, int num2)
{
Console.WriteLine("----求积----");
return num1 * num2;
}
} //定义一个Person类
class Person
{
//姓名
private string name = "";
//年龄
private int age = ;
//构造方法
public Person(string PName, int PAge)
{
this.Name = PName;
this.Age = PAge;
}
public int Age
{
get { return age; }
set { age = value; }
}
public string Name
{
get { return name; }
set { name = value; }
} }

C# 委托2的更多相关文章

  1. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

  2. C#基础篇 - 理解委托和事件

    1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...

  3. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  4. [C#] C# 知识回顾 - 委托 delegate

    C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...

  5. 9、委托、事件、Lambda

    开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.)   第 ...

  6. iOS 委托与文本输入(内容根据iOS编程编写)

    文本框(UITextField) 本章节继续编辑 JXHypnoNerd .文件地址 . 首先我们继续编辑  JXHypnosisViewController.m 修改  loadView 方法,向  ...

  7. C#委托异步调用

    参考页面: http://www.yuanjiaocheng.net/webapi/mvc-consume-webapi-get.html http://www.yuanjiaocheng.net/w ...

  8. JavaScript事件代理和委托(Delegation)

    JavaScript事件代理 首先介绍一下JavaScript的事件代理.事件代理在JS世界中一个非常有用也很有趣的功能.当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节点而将事件委 ...

  9. .NET面试题系列[7] - 委托与事件

    委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...

  10. .NET基础拾遗(4)委托、事件、反射与特性

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

随机推荐

  1. Android 有缓存功能的请求封装接口

    /* * @Company 浙 江 鸿 程 计 算 机 系 统 有 限 公 司 * @URL http://www.zjhcsoft.com * @Address 杭州滨江区伟业路1号 * @Emai ...

  2. 【转】ubuntu12.04下安装chrome浏览器

    原文网址:http://blog.163.com/zhou_411424/blog/static/197362156201331931313549 下载google chrome deb包 32位:h ...

  3. STL中istream_iterator和ostream_iterator的基本用法

    标准程序库定义有供输入及输出用的iostream iterator类,称为istream_iterator和ostream_iterator,分别支持单一型别的元素读取和写入.使用这两个iterato ...

  4. Java宝典(一)

    -switch语句能作用在byte上,能否作用在long上,能否作用在String上? -在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或I ...

  5. 类linux 系统iptables 系统初始化配置

    #!/bin/bash iptables -F iptables -X /etc/rc.d/init.d/iptables save service iptables restart iptables ...

  6. fcitx-rime添加五笔/五笔拼音

    简介 Rime,全名:中州韵输入法引擎,它不仅仅是一个输入法,也是一个输入法算法框架.Rime 支持拼音.双拼.注音.五笔和仓颉等音码.形码输入法. 安装 Debian sid 用户可以使用下面命令安 ...

  7. fcitx 输入框纵向

    打开~/.config/fcitx/conf/fcitx-classic-ui.config 找到下面的:# 竖排候选词列表# 可选值:# True False#VerticalList=True-- ...

  8. Apache POI组件操作Excel,制作报表(二)

    本文接上一篇继续探究POI组件的使用.     现在来看看Excel的基本设置问题,以2007为例,先从工作簿来说,设置列宽,因为生成表格列应该固定,而行是遍历生成的,所以可以在工作簿级别来设置列宽, ...

  9. spring容器IOC原理解析

    原理简单介绍: Spring容器的原理,其实就是通过解析xml文件,或取到用户配置的bean,然后通过反射将这些bean挨个放到集合中,然后对外提供一个getBean()方法,以便我们获得这些bean ...

  10. 我在使用vector时候遇到的二逼问题

    最近在练习使用STL中德各种容器,像vector,map,set之类的. 然后在使用vector的时候,无意间遇到了一个很二逼的问题. 主要是这样的,请看源码(C++): //错误的写法: #incl ...