C# 委托2
委托的定义:
(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的更多相关文章
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
- C#基础篇 - 理解委托和事件
1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...
- [.NET] C# 知识回顾 - 委托 delegate (续)
C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...
- [C#] C# 知识回顾 - 委托 delegate
C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...
- 9、委托、事件、Lambda
开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.) 第 ...
- iOS 委托与文本输入(内容根据iOS编程编写)
文本框(UITextField) 本章节继续编辑 JXHypnoNerd .文件地址 . 首先我们继续编辑 JXHypnosisViewController.m 修改 loadView 方法,向 ...
- C#委托异步调用
参考页面: http://www.yuanjiaocheng.net/webapi/mvc-consume-webapi-get.html http://www.yuanjiaocheng.net/w ...
- JavaScript事件代理和委托(Delegation)
JavaScript事件代理 首先介绍一下JavaScript的事件代理.事件代理在JS世界中一个非常有用也很有趣的功能.当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节点而将事件委 ...
- .NET面试题系列[7] - 委托与事件
委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...
- .NET基础拾遗(4)委托、事件、反射与特性
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
随机推荐
- 【转】ARM Linux 3.x的设备树(Device Tree)
原文网址:http://blog.csdn.net/21cnbao/article/details/8457546 1. ARM Device Tree起源 Linus Torvalds在201 ...
- 【剑指offer】面试题32:从1到n整数中1出现的次数
题目: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.A ...
- 应用程序打包(ipa)
如果想让用户可以安装ipa, 必须在打包程序的时候说清楚哪一个应用程序(appid)可以安装到哪一台设备上.(UDID). 原理: 要想打包, 告诉苹果, 哪一台电脑可以进行打包 步骤: 让电脑端具备 ...
- [置顶] Android学习系列-把文件保存到SD卡上面(6)
Android学习系列-把文件保存到SD卡上面(5) 一般多媒体文件,大文件需要保存到SD卡中.关键点如下: 1,SD卡保存目录:mnt/sdcard,一般采用Environment.getExter ...
- linux文件权限整理
网上对linux文件权限的已经很多,不过还是要自己整理一下,不然每次都要查资料. linux下所有东西都是文件,包括设备,所以这里的文件也包括文件夹. 先是查看文件权限:ls -lh xzc@xzc- ...
- MVC 简单数据传递
Mode: namespace MVCDemo.Models { public class Data { //申明为静态 归类所有,取数据不要实例化 ; public static string st ...
- Chosen 基本使用
点击下载Chosen 引入文件 chosen.css jquery-1.7.1.min.js chosen.jquery.js 绑定数据: for (var i = 0; i < data.le ...
- web前端之 CSS引入第三方插件
引入第三方图标插件 - fontawesome 官网地址:http://fontawesome.io/ 1.下载图标插件包 下载地址:https://codeload.github.com/FortA ...
- C/C++基本数据类型所占字节数
关于这个主要的问题,非常早曾经就非常清楚了,C标准中并没有详细给出规定那个基本类型应该是多少字节数,并且这个也与机器.OS.编译器有关,比方相同是在32bits的操作系统系,VC++的编译器下int类 ...
- 面试前的准备---C#知识点回顾----05
技术博客还得继续写,工作还在筛选,学习还得继续 1.Session和Cookie的使用区别 很容易回答的就是Session在服务器端,存储的数据可以较大容量,比如我们存一个Table,上千条数据. C ...