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

根据这件事我们来分析:

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

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

老师类:

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. MYSQL常见语句

    SHOW INDEXES  from tablename EXPLAIN  tablename EXPLAIN SELECT *  FROM tablename

  2. GC 源码分析

    java对象的内存分配入口 Hotspot 源码解析(9) •内存代管理器TenuredGeneration对垃圾对象的回收2015-01-18阅读1154 •内存代管理器DefNewGenerati ...

  3. RestEasy 3.x 系列之四:使用Hibernate_Validator进行数据校验

    使用Hibernate_Validator进行数据校验,好处不言而喻:规范统一,低耦合度. 1.pom.xml <dependency> <groupId>org.hibern ...

  4. Mysql大量数据快速排序方案

    日常开发中经常需要对数据进行排序,通常可以讲数据库中的数据获取到后通过程序在内存中进行排序,但是这样排序需要将排序内容从数据库中查询到内容,同时使用程序算法进行排序,然后将排序结果更新入数据库,这样排 ...

  5. FileSystem.DeleteDirectory遇到"无法删除 文件:无法读取源文件或磁盘"

    Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(fileFolder, UIOption.AllDialogs, RecycleOpti ...

  6. IIS7下使用4.0框架集成模式URLRewriter重写中文URL乱码问题

    解决方法: 1 url中中文先通过Server.UrlEncode编码 2 修改网站编码 3.更改URLRewriter.net中源码 找到RewriterEngine类中 private strin ...

  7. 5. Longest Palindromic Substring

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  8. 【巩固】bootstrap笔记二

    这段主要记录如何给排版完的页面加一些动画效果,用到了的插件有: wow.min.js jquery.singlePageNav.min.js animate.css 将导航条上对应的菜单和页面上对应的 ...

  9. Android学习笔记(十三)

    Android中的广播机制 Android提供了一套完整的API,允许应用程序自由地发送和接受广播. 发送广播的方法借助于Intent,接受广播的方法需要广播接收器(BroadcastsReceive ...

  10. 用Python向MySQL数据库插入数据

    最近一直在学习MySQL数据库,很感兴趣.这次我做了一个简单的尝试,使用Python3.4与MySQL数据库进行交互,将一份从雪球网上下载的某股票数据上传至MySQL数据库.仅为初学者提供参考,高手请 ...