C# 委托, 铭轩同学原创

委托的定义:

    (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(1, 2));

//比较两个字符的长度
del = new DelegateCompare(strLengthCompare); //完整写法
Console.WriteLine(del("123456", "admin"));

del = PersonAgeCompare; //简写
Console.WriteLine(del(new Person("张三", 18), new Person("李四", 20)));

/*-------------取最大值-----------*/
DelegateCompare delMax;

delMax = intCompare; //整数
Console.WriteLine(GetMax(new object[] { 1, 5, 3, 6, 8, 7 }, 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("张三", 18), new Person("李四", 14), new Person("万物", 20) }, delMax)).Name);

/*----------匿名委托----------*/

//标准写法
DelegateCompare del2 = delegate(object o1, object o2) { return (int)o1 - (int)o2; };
Console.WriteLine("匿名委托" + del2(5, 3));
//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));

/*----------------多播委托----------*/
//多播委托一般情况下 要求没有返回值, 若有, 则返回最后一个方法的返回值
DelegateTotal delTotal = He;
delTotal += Cha;
delTotal += Ji;
Console.WriteLine(delTotal(2, 4));
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 > 1)
{
object _max = arr[0];
for (int i = 1; i < arr.Length; i++)
{
if (del(_max, arr[i]) < 0)
{
_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 = 0;
//构造方法
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# 委托, 铭轩同学原创

时间: 2024-10-05 05:04:37

C# 委托, 铭轩同学原创的相关文章

C# 计划任务 铭轩同学原创

计划任务 :  个人理解, 就是后台控制程序要求在一定的时间执行相应的任务. 直接上代码: 之前,因为工作需要. 要求每天在凌晨2:00,执行要做的数据 1.1  声明一个接口 Ijob 方法: 执行 public interface IJob { //执行方法 void Execute(); } 1.2 声明一个调度程序配置类 属性: 任务列表 (要实行的任务) ,  时间间隔 (多久执行一次); /// <summary> /// 调度程序配置 /// </summary> p

C# 指针_铭轩同学原创

using System; using System.Collections.Generic; using System.Text; namespace HelloWorld { class Program { static void Main(string[] args) { // 1.指针的定义 // 1.1指针是专门处理地址的数据类型 // 1.2指针是某个内存单元的首地址 // 2.C#指针的和C,C++的区别(这里我们需要知道两个关键字 unsafe 和 fixed) // 2.1指针

学习体会

对于这个小黄衫的奖励我感到很意外,因为班上的同学比我写代码写得好的有的是,但是老师和助教发给我,那就是对我学习的肯定.在分享学习经验之前,我想对助教老师说声对不起,因为我第五次和第六次作业写得太烂了,根本没有用心写. 其实我认为这也算不上是分享学习经验吧,只能说是大家一起谈论交流一下,怎样可以把c语言学的更好啊,分享一下平时的生活什么的.我记得在开学之前领书的时候,刚刚拿到c语言这本,他们就说回去预习,我当时还问c语言是啥啊,他们告诉我说是一种你跟电脑对话的语言,当时我就觉得真是厉害了.在开学之

我的职业生涯总结---班门弄斧之我们该怎样从零开始学习.NET

标题说的很清楚了,这篇文章纯属班门弄斧,大神可随意喷.我只是结合自己4年不到的学习与使用.NET的水平. 首先说下这篇博客的背景吧.前两天有个我的读者加我微信,然后就有了下面这样的对话, 可能有些人第一眼看到这段对话会觉得我有点装13的感觉,后来想想我这样的回复可能真的会让一个刚入行的兄弟感到心凉,在这里说声抱歉.当时我回复他说有点忙的时候是已经过了一个小时,但当时确实在研究支付宝的一些东西给忙忘记了,还请谅解.我当时并没有给他什么实质性的建议,原因是我确实不知道该怎样来告诉他怎么来学习,因为我

【桥】10203 - 司马杀马岱

[桥]10203 - 司马杀马岱 Time Limit: 1000MS Memory Limit: 32768KB 本题由南山李博放同学原创!在此感谢! 某日司马要杀马岱 于是买了个羊仗 飚了个专属 簸出了基地 他已经知道马岱的位置(送马云鹭回家的路上) 由于司马想放大技 所以他必须在一个月黑风高的桥上动手 所谓桥 就是指如果去掉了这个路 从司马的血池到马岱的血池就成不了可能 通俗的讲 就是不联通了 真三的地图是一个十分之帅气的地图 举个例子 一个人总是爱走同样的路 为什么呢?因为环是没有的!

北工大耿丹学院16级计科院3班C语言课程助教学期总结

很荣幸得到邹老师,周老师,以及北工大耿丹学院各位老师的认可,担任计科院3班C语言课程助教,班主任为李光杰老师,很感谢李老师一学期的帮助,使得我更好的担任助教一职.我班学生31名,很愉快的与同学们度过一个美好的学期,其实作为助教同样从学生们身上学到很多知识,感谢各位同学对助教工作的配合和支持. 下面我将对本学期助教工作进行总结: 1.分析同学们本学期的成绩概况 2.分析期末同学们的问卷调查 3.我想对同学们说的话 4.概括本学期我的工作情况 5.我对教学模式的看法以及建议 6.结语 注:我班博客园

漫谈正态分布的生成

本文作者简介:王夜笙,就读于郑州大学信息工程学院,感兴趣的方向为逆向工程和机器学习,长期从事数据抓取工作(长期与反爬虫技术作斗争~),涉猎较广(技艺不精……),详情请见我的个人博客~ 个人博客地址:http://bindog.github.io/blog/ 邮箱:[email protected] 感谢怡轩同学的悉心指导~ 之前拜读了靳志辉(@rickjin)老师写的<正态分布的前世今生>,一直对正态分布怀着一颗敬畏之心,刚好最近偶然看到python标准库中如何生成服从正态分布随机数的源码,觉

NSOJ 飞船汇合(经典)

一支分散的飞船舰队,需要汇合到主舰,但是这种飞船在太空中飞行的耗油与质量没有关系,只与发动机打开的时间有关系,为了节省油量,指挥官通知,汇合途中,多台飞船可以串成串飞行,这样只需启动一台发动机,由于安全因素飞船只能走某些航线(某飞船到某飞船的航线).指挥发现这样的移动方案可能有多种,但最短汇合时间相同,指挥官想考察你是否知道在总耗油最小的情况下,最短多久汇合完毕. Input T(T<10)组数据每组第一行有一个整数N(飞船个数<=300),之后第一行是其他飞船到主舰的时间,再有n行,每行n个

部署生产环境

主要是参考官方教程 本地环境:ubuntu12.04 64位 更新系统 sudo apt-get update -y sudo apt-get upgrade -y sudo reboot 使用vpn,保证网络能畅通连接到国外,你懂的. 我使用的是sshuttle,可参考我的博客 获取vagrant.sh脚本 wget https://raw.github.com/edx/configuration/master/util/install/vagrant.sh -O - | bash 遇到问题