关于C#的委托(delegate)的自我理解
首先描述一个事情,一个老师饿了,他要去买东西填饱肚子,然后他发现他的学生“小李”在玩,没学习,于是就委托“小李”去帮他买吃的。
根据这件事我们来分析:
首先得有个老师(老师饿了是他的方法,老师买东西也是他的方法),其次再有个学生(能接收老师发来的信息并存储,能去做事情,有名字)。
于是我们就可以创建两个类:
老师类:
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)的自我理解的更多相关文章
- C#中的委托(Delegate)和事件(Event)
原文地址:C#中的委托(Delegate)和事件(Event) 作者:jiyuan51 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设计模式--观察者(Obs ...
- (转)C#中的委托(Delegate)和事件(Event)
转自:http://blog.chinaunix.net/uid-576762-id-2733751.html 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写 ...
- Thread线程join方法自我理解
Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...
- C#高级编程笔记 Delegate 的粗浅理解 2016年9月 13日
Delegate [重中之重] 委托 定义一:(参考)http://www.cnblogs.com/zhangchenliang/archive/2012/09/19/2694430.html 完全可 ...
- 对象.delegate=self的理解
整理自:http://www.cocoachina.com/ask/questions/show/87430 各位大神,对象.delegate=self是啥意思,委托的意思不就是自己的任务交给其他人去 ...
- C#的委托(delegate、Action、Func、predicate)
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 delegate我们常用到的一种声明 delegate至少0个参数,至多32个参 ...
- C#中的委托 Delegate(委托 也叫代表,代表一类方法)
1. 委托类似与 C或C++中的函数指针,但委托是 面向对象的,并且是类型安全的 详情可查看官方文档:https://msdn.microsoft.com/en-us/library/ms173172 ...
- C#的委托Delegate
一.委托基础 1.什么是委托 委托(Delegate) 是存有对某个方法的引用的一种引用类型变量,用关键字delegate申明,实现相同返回值和参数的函数的动态调用,提供了对方法的抽象. 委托(Del ...
- android 的生命周期自我理解
android的active的生命周期,经过网站的blog学习,加上自己的理解总结如下: 第1种:全新的启动应用程序顺序 onCreate--->onStart---->onResume ...
随机推荐
- Android学习十二:跑马灯程序实现(简单联系)
package org.tonny; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; ...
- sublime插件使用整理
考虑到后续要有更多的时间来写js,周末好好的把sublime整理了下,很多插件非常好.下面一一来说 1. 注释生成插件 DocBlockr 之前每次写函数的注释都要复制其他函数的注释,然后在写,非常 ...
- Shell编程之--“grep-awk-sed” 基础用法汇总-菜鸟入门级
- CSS 相邻兄弟选择器
相邻兄弟选择器(Adjacent sibling selector)可选择紧接在另一元素后的元素,且二者有相同父元素. 选择相邻兄弟 如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以 ...
- winform中ComboBox实现text和value,使显示和值分开,重写text和value属性
winform的ComboBox中只能赋值text,显示和值是一样的,很多时候不能满足根本需要,熟悉B/S开发的coder最常用的就是text和value分开的,而且web下DropDownList本 ...
- Cannot get a connection, pool exhausted解决办法
http://blog.163.com/it_message/blog/static/8892051200908102032653/ 连接池(Tomcat+oracle),运行一段时间后就会出现 Ca ...
- 小例子 熟悉jquery
<div class="tab-head"> <h2 id="tab1" class="selected">JQGr ...
- Android学习笔记(十四)
Android中的数据存储 数据持久化就是指那些内存中的瞬时数据保存到存储设备中.Android系统中主要提供了三种方式用于简单地实现 数据持久功能,即文件存储.SharedPreferences存储 ...
- terminator 安装及使用
1. 安装 $ sudo apt-get install terminator 2. 右键设置首选项 背景设置为0.8透明度, 字体挤在一起:在ubuntu下请选择mono后缀的字体就可以了 3. 使 ...
- C# 托管和非托管混合编程
在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难. 最直接的实现托管与非托管编程的方法就是 ...