委托的定义:

    (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. Unix 主机认证配置

    A机用户: ssh-keygen -t rsa ssh-keygen -t dsa cd .ssh cat *.pub >>authorized_keys  ---注意一定要追加,不然会覆 ...

  2. PHP里关于时间日期大小写(Y,y,M,m...)

    y代表年份,取后两位        Y代表年份全部        m代表月份        M代表月份英文简写        d代表天        D代表星期几的简写        h代表小时,12 ...

  3. SqlServer 查询表、表说明、关联表、字段说明,语句汇总

    ----查询所有的表 SELECT * FROM SYSOBJECTS WHERE TYPE='U' ----根据表名查询所有的字段名及其注释 SELECT A.NAME,B.VALUE FROM S ...

  4. PHP文件目录copy

    /**(2) PHP文件目录copy @param string $dirsrc 原目录名称字符串 @param string $dirto 目标目录名称字符串 */ function copyDir ...

  5. pyqt 配置文件例子学习

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import sys,datetime from PyQt4.QtC ...

  6. python学习之路-4 内置函数和装饰器

    本篇涉及内容 内置函数 装饰器 内置函数 callable()   判断对象是否可以被调用,返回一个布尔值 1 2 3 4 5 6 7 8 9 10 11 num = 10 print(callabl ...

  7. Java并发编程--Volatile详解

    摘要      Volatile是Java提供的一种弱同步机制,当一个变量被声明成volatile类型后编译器不会将该变量的操作与其他内存操作进行重排序.在某些场景下使用volatile代替锁可以减少 ...

  8. OCP-1Z0-051-题目解析-第6题

    6. Examine the structure of the SHIPMENTS table: name                    Null        Type PO_ID      ...

  9. Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6629298 在前面一篇文章浅谈Android系 ...

  10. hibernate 用hql做中文排序

    用Hibernate+MySQL的童鞋是不是非常苦恼为什么MySQL不支持中文排序呢?没办法.仅仅有等utf8_unicode_cn 出来了.假设用hibernate即想实现跨库,又想不改代码怎样实现 ...