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与数据库开 ...
随机推荐
- WPF利用Image实现图片按钮
之前有一篇文章也是采用了Image实现的图片按钮,不过时间太久远了,忘记了地址.好吧,这里我进行了进一步的改进,原来的文章中需要设置4张图片,分别为可用时,鼠标悬浮时,按钮按下时,按钮不可用时的图片, ...
- Pawn Brotherhood
Pawn Brotherhood 1 alpha_table = "abcdefgh" 2 3 def safe_pawns(pawns): 4 safe_count = 0 5 ...
- 2015第15周日PostgreSQL学习
英文版官网地址:http://www.postgresql.org/ 上面显示的最新版本信息是PostgreSQL 9.4.1, 9.3.6, 9.2.10, 9.1.15 & 9.0.19 ...
- bzoj1752 [Usaco2005 qua]Til the Cows Come Home
Description Bessie is out in the field and wants to get back to the barn to get as much sleep as pos ...
- hdu5772-String problem(最大权闭合子图问题)
解析: 多校标答 第一类:Pij 表示第i个点和第j个点组合的点,那么Pij的权值等于w[i][j]+w[j][i](表示得分)第二类:原串中的n个点每个点拆出一个点,第i个点权值为 –a[s[i]] ...
- 案例:用JS实现放大镜特效
案例:用JS实现放大镜特效 案例:用JS实现放大镜特效
- 【转】ffserver用法小结
我们可以通过ffserver以及ffmpeg做一个简单的视频监控系统,ffserver用于视频的转发调度,ffmpeg用于转码 而对于ffserver最基本也是最重要的就是对它的ffserver.co ...
- poj 3180 The Cow Prom(tarjan+缩点 easy)
Description The N ( <= N <= ,) cows are so excited: it's prom night! They are dressed in their ...
- UIView属性clipsTobounds的应用
view添加view,并剪边(UIView属性clipsTobounds的应用) 如题,有两个view: view1,view2 view1添加view2到其中,如果view2大于view1,或者vi ...
- doT.js 声明
// 模板引擎配置项 var tmplOptions = { evaluate: /\{\{([\s\S]+?\}?)\}\}/g, interpolate: /\{\{=([\s\S]+?)\}\} ...