首先描述一个事情,一个老师饿了,他要去买东西填饱肚子,然后他发现他的学生“小李”在玩,没学习,于是就委托“小李”去帮他买吃的。

根据这件事我们来分析:

首先得有个老师(老师饿了是他的方法,老师买东西也是他的方法),其次再有个学生(能接收老师发来的信息并存储,能去做事情,有名字)。

于是我们就可以创建两个类:

老师类:

public class Teacher
{
// 老师饿了,一般情况是老师自己去买吃的
public void Hungry1()
{
GoBuyEat("辣条");
}
public void GoBuyEat(string eatName)
{
Debug.Log("买的吃的是" + eatName);
}
}

学生类:

public class Student
{
public string name;
public Student(string name)
{
this.name = name;
eatName = string.Empty; Debug.Log(name);
} private string eatName; public void GetTeacherEatName(string eatName)
{
this.eatName = eatName;
}
  public void Do(Something something)
{
something(eatName);
}
}

在主入口里面:

void main()
{
Teacher t = new Teacher();
t.Hungry();
}

OK,仔细的人看到了在学生类中Do函数内有个Something了吧!这个就是委托。那我们把他声明创建出来。位置放在类外面作为全局。

// 定义委托 - 访问修饰符 delegate 返回值类型 委托名 (参数列表);
public delegate void Something(string name);

那有委托了,我们在老师类中再创建个饿了函数。

// 如果用委托的话,老师就会找个学生去买吃的
public void Hungry2()
{
Student s = new Student("小李");
s.GetTeacherEatName("辣条");
Something a = new Something(GoBuyEat); s.Do(a);
}

这里看不懂的话,我把学生的Do函数注释写上来估计大家都懂了。

// 学生有个行为,就是做事(注: 但是学生不知道做什么事,需要老师告诉,即需要老师把委托的事告诉学生,即把方法名告诉学生)
// 怎么才能把方法名传递给学生呢?就需要通过委托这个方式,把老师要做的事,写成委托一样的格式,然后当成参数传递给委托,就行了
public void Do(Something something) // 委托可以像普通类型一样当作方法参数传递
{
// 委托可以像普通方法一样调用
something(eatName);
}

一般delegate用作回调。关于回调,我自己也没有完全理解清楚。

这个写在这里仅供自己忘记的时候回来参考,如果有错误,请大神指出,谢谢。如果能帮助到其他人,我也觉得很荣幸。

关于C#的委托(delegate)的自我理解的更多相关文章

  1. C#中的委托(Delegate)和事件(Event)

    原文地址:C#中的委托(Delegate)和事件(Event) 作者:jiyuan51 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设计模式--观察者(Obs ...

  2. (转)C#中的委托(Delegate)和事件(Event)

    转自:http://blog.chinaunix.net/uid-576762-id-2733751.html   把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写 ...

  3. Thread线程join方法自我理解

    Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...

  4. C#高级编程笔记 Delegate 的粗浅理解 2016年9月 13日

    Delegate [重中之重] 委托 定义一:(参考)http://www.cnblogs.com/zhangchenliang/archive/2012/09/19/2694430.html 完全可 ...

  5. 对象.delegate=self的理解

    整理自:http://www.cocoachina.com/ask/questions/show/87430 各位大神,对象.delegate=self是啥意思,委托的意思不就是自己的任务交给其他人去 ...

  6. C#的委托(delegate、Action、Func、predicate)

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 delegate我们常用到的一种声明 delegate至少0个参数,至多32个参 ...

  7. C#中的委托 Delegate(委托 也叫代表,代表一类方法)

    1. 委托类似与 C或C++中的函数指针,但委托是 面向对象的,并且是类型安全的 详情可查看官方文档:https://msdn.microsoft.com/en-us/library/ms173172 ...

  8. C#的委托Delegate

    一.委托基础 1.什么是委托 委托(Delegate) 是存有对某个方法的引用的一种引用类型变量,用关键字delegate申明,实现相同返回值和参数的函数的动态调用,提供了对方法的抽象. 委托(Del ...

  9. android 的生命周期自我理解

    android的active的生命周期,经过网站的blog学习,加上自己的理解总结如下: 第1种:全新的启动应用程序顺序 onCreate--->onStart---->onResume ...

随机推荐

  1. JSBinding / FAQ & Trouble Shooting

    Q: Why javascript file extension is .javascript?A: Because Unity treats .js files as Unity script an ...

  2. JavaScriptPolyfillShim 在JavaScript中Shim和Polyfill有什么区别?

    在JavaScript的世界里,有两个词经常被提到,那就是Shim和Polyfill,它们指的都是什么,又有什么区别?在本文中,将简短的给大家介绍他们之间的联系和区别.Shim一个shim就是一个库, ...

  3. Linux-Rsync服务器/客户端搭建实战

    一.需求 每晚汇总各机器的操作日志,同步到主服务器进行日志分析. 二.基础知识 rsync 分为服务器端.客户端,服务器端搭建比客户端辛苦一些(也是很简单). rsync 服务器是指以 deamon ...

  4. 关于使用微信登录第三方APP的实现(Android版)

    使用微信登录APP,免去注册过程,现在已经有很多的类似应用了.集成该功能过程不复杂,但还是有一些地方需要注意的. 开始之前,需要做下面的准备工作. 1.到微信开放平台注册你的APP,并申请开通微信登录 ...

  5. Shell编程之--“grep-awk-sed” 基础用法汇总-菜鸟入门级

  6. Spring事务管理(转)

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring的事务管理分为声明式跟编程式.声明式就是在Spring的配置文件中进行相关配置 ...

  7. 编译Docker<v1.9.0>源码和初级安装

    本文主要介绍了如何在POWER CPU处理器上编译和安装Docker服务.很多时候,我们都需要自己编译Docker源码,有的时候是由于自己的处理器没有对应的安装包,有的时候是由于当前的新版本还有发布, ...

  8. python---set集合

    集合(set)是一个无序不重复元素的序列. #!/usr/bin/python3 student = ({'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}) p ...

  9. [系统开发] 基于Ansible的产品上线系统

    前言: 应部门急需,开发了一套基于Ansible Playbook的产品上线系统.由于时间很紧,UI直接套用了之前开发的一套perl cgi模板,后续计划用 django 重新编写. 个人感觉该系统的 ...

  10. 一个非常牛比的前端google插件

    WEB前端助手(FeHelper) 用了都说好,嘻嘻