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

根据这件事我们来分析:

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

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

老师类:

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. Visibility属性控制元素的显示和隐藏

    w3cschool案例: <!DOCTYPE html> <html> <body> <p id="p1">这是一段文本.</ ...

  2. windows系统下在dos命令行kill掉被占用的pid (转)

    原文出自:http://www.2cto.com/os/201304/203771.html   windows系统下在dos命令行kill掉被占用的pid   1.开始-->运行-->c ...

  3. [Linux] - Docker移动数据到其它盘的办法

    由于使用yum安装Docker,默认是数据是存放在系统盘/var/lib目录下,需要把它放到其实盘里头.方法可以这样做: 1.在其它盘中新建一个目录,比如我的:/yunpan/docker mkdir ...

  4. VPython 三维显示 —— hello word

    使用VPython,python(x,y)中已安装VPython模块 from visual import * cylinder(pos=(0,1,0), axis=(0,1,0), radius=0 ...

  5. Android模拟器连接本李服务器localhost

    Android模拟(simulator)把它自己作为了localhost,也就是说,代码中使用 localhost或者127.0.0.1来访问,都是访问模拟器自己! 如果你想在模拟器simulator ...

  6. 【Infobright】infobright数据导入导出测试

    创建数据库 create database if not exists `mytestdb` default charset=utf8; use mytestdb; 说明: 如果使用utf8字符集,则 ...

  7. JSP中动态include和静态include的区别(简版)

    动态的include: 用法:<jsp:include page="1.jsp" flush="true" /> 特点:行为元素,可以带参数:先编译 ...

  8. 熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】

    软件环境:Win7+MDK4.7.2 硬件环境:STM32F4Discovery 所用OS代码:RT-Thread2.0.0 beta 下载地址: https://github.com/RT-Thre ...

  9. jQuery源码:从原理到实战

    jQuery源码:从原理到实战 jQuery选择器对象 $(".my-class"); document.querySelectorAll*".my-class" ...

  10. 修改eclipse中包的显示结构为树形