C#学习笔记(34)——委托传值(回忆版)
说明(2018-4-6 20:31:03):
1. 昨天晚上看三层,看完第一天的最后一节,会员的修改和增加,感觉欲仙欲死,果断关机睡觉。
2. 上午搞了半天哈利波特的原版书epub的下载,结果都没发现一个排版能看的,就连多看卖的正版里面都是字体大小不一,遂决定先把爱丽丝看完再去寻找其他的。
3. 下午2点起床,开始对着电脑冥想,想那个窗体传值怎么弄的来着,拖出两个窗体来,怎么捣鼓都捣鼓不出来,就在这较上劲了,一直想到六点半,吃完我妈擀的面条,又想了一个小时,估计是8点的时候,终于想通了,能够实现传值了。
4. 翻了翻之前的博客,关于委托写了不下十篇了,包括自己写的,从别处抄的。大部分都是讲的委托的基础用法,委托现在在网上已经神乎其神,玄乎其玄,近乎其妖了,怎么讲的都有。然而并没有任何卵用,文章照样看得懂,用的时候照样懵逼。
5. 所以说啊,一个东西你不去实际使用它,就永远不知道怎么用。都说委托是个坎,确实是啊!你不会就只能看会的人装逼,说什么委托其实很简单啊,其实就是个指针嘛,只要理解了就很容易的。。等等屁话。
6. 就是因为不会委托,所以看不下去asp.net,看不下去三层,可以说不会委托,你根本就深入不下去,就好比有一条大河,你要去对岸,就必须要通过委托这座桥,你想直接跳过去是不可能的!
7. 这一下午,我开始一直在想,委托和指针有什么联系,委托是不是存了一个函数的地址?因为之前为了弄清委托原理,我学习了一段时间数据结构,所以老想着往指针上面靠,然后我就去查资料,结果走上了不归路。
8. 在查资料的过程中,看到有人说委托的最大的应用是在设计模式中的观察者模式,于是去找视频,不得不说啊,c#真的是不吃香了,搜设计模式,基本都是Java的,好不容易找到一个讲c#的,讲的是大话设计模式这本书,我手头正好有一本,但是视频里还没讲到委托部分就没了。而且我翻了一下书,里面也只是最基础的运用。我说的基础,就是网上大部分文章介绍的,MyDelegate myDel= SayHello; myDel()这种没有营养的应用。
9. 虽然窗体传值只有几行代码,我却想了6个小时。但当程序实现的那一刻,我的欣喜是难以名状的,甚至现在都还在窃喜,感觉这一天值了。虽然三层里的事件更加复杂,但这也算是入门了吧!
10. 在我最后往代码里加注释的时候,我居然还即兴编出了一个故事!委托被称为代理,但我觉得委托更像是一个间谍!
11. 开始讲故事!
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace _05窗体传值
{
//1.定义委托(MyDel就像是Form2的一个间谍,已经潜入到了Form1中)
public delegate void MyDel(string str);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//2.绑定委托(间谍mdl拿到了这颗炸弹的遥控器)
MyDel mdl = ChangeTxt;
//Form2通过构造方法进行初始化(此时,通过Form2的载人飞船,间谍mdl可以回到Form2基地)
Form2 f2 = new Form2(textBox1.Text,mdl);
f2.ShowDialog();
}
//定义方法,一会儿好绑定委托(有人在Form1中埋下了一颗炸弹)
private void ChangeTxt(string str)
{
textBox1.Text = str;
}
}
}
Form2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace _05窗体传值
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
//Form2派出新的间谍
private MyDel mdl;
public Form2(string str,MyDel mdl):this()
{
//新派出的间谍,与返回的间谍交接,新间谍拿到遥控器
this.mdl = mdl;
textBox1.Text = str;
} private void button1_Click(object sender, EventArgs e)
{
//3.调用委托(新间谍按下遥控器按钮,BOOM!!!)
mdl(textBox1.Text);
}
}
}
运行结果参考:https://www.cnblogs.com/Jacklovely/p/7886612.html
补充:
1. 以前做这个窗体传值,一直以为委托只能写在Form2里,但实际上写在Form1里也可以,因为委托写在命名空间下面,类的外面,所以只要是在这个命名空间里的,所有地方都可以调用到这个委托!
2. Form1.cs中,可以不用声明一个委托变量来绑定ChangeTxt方法,可以直接把ChangeTxt方法放进Form2的构造函数里传过去,不过为了好理解,以及符合剧情,我还是加上了。
3. 我觉得这个例子很生动,很天纵奇才,希望有人能看懂,哈哈哈!
C#学习笔记(34)——委托传值(回忆版)的更多相关文章
- OD调试学习笔记7—去除未注册版软件的使用次数限制
OD调试学习笔记7—去除未注册版软件的使用次数限制 本节使用的软件链接 (想自己试验下的可以下载) 一:破解的思路 仔细观察一个程序,我们会发现,无论在怎么加密,无论加密哪里,这个程序加密的目的就是需 ...
- 《C# 语言学习笔记》——委托
委托是一种可以把引用存储为函数的类型. 委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字.委托的声明制定了一个返回类型和一个参数列表. 在定义了委托后,就可以声明该委托类型的变量 ...
- [原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
前言: C#委托是什么 c#中的委托可以理解为函数的一个包装, 它使得C#中的函数可以作为参数来被传递, 这在作用上相当于C++中的函数指针. C++用函数指针获取函数的入口地址, 然后通过这个指针 ...
- [C#学习笔记]Func委托与Action委托
学习一项新知识的时候,最好的方法就是去实践它. 前言 <CLR via C#>这本神书真的是太有意思了!好的我的前言就是这个. Fun 如果要用有输入参数,有返回值的委托,那么Func委托 ...
- js学习笔记-事件委托
通过事件委托,你可以把事件处理器绑定到父元素上,避免了把事件处理器添加到多个子级元素上.从而优化性能. 事件代理用到了事件冒泡和目标元素.而任何一个元素的目标元素都是一开始的那个元素. 这里首先要注意 ...
- Linux下汇编语言学习笔记34 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- 量化投资学习笔记34——《Python机器学习应用》课程笔记08
岭回归 解决某些训练样本线性相关,导致回归结果不稳定的情况. 它是一种用于共线性数据分析的有偏估计回归方法.是一种改良的最小二乘估计法. 在sklearn中使用sklearn.linear_model ...
- 正则表达式学习笔记(附:Java版示例代码)
具体学习推荐:正则表达式30分钟入门教程 . 除换行符以外的任意字符\w word,正常字符,可以当做变量名的,字母.数字.下划线.汉字\s space,空白符 ...
- IOS学习笔记34—EGOTableViewPullRefresh实现下拉刷新
移动应用开发中有这么一种场景,就是在列表中显示的数据刷新,有点击刷新按钮刷新的,也有现在最流行的由Twitter首先推出的下拉刷新功能,在IOS中,使用下拉刷新更新UITableView中的数据也用的 ...
随机推荐
- XamarinEssentials教程首选项Preferences判断项目是否存在
XamarinEssentials教程首选项Preferences判断项目是否存在 首选项也可以称为偏好设置.它以键值对的形式保存数据,适用于用户少量数据的存储.例如,将用户的个性化设置保存后,每次打 ...
- 如何生成WebAssembly文件?
许多3D游戏都是用C/C++语言写的,如果能将C/C++语言编译成JavaScript代码,它们不就能在浏览器里运行了吗?Emscripten的底层是LLVM编译器,Emscripten可以将c/c+ ...
- 1038. Jewels And Stones
描述 给定字符串J代表是珠宝的石头类型,而S代表你拥有的石头.S中的每个字符都是你拥有的一个石头. 你想知道你的石头有多少是珠宝. J中的字母一定不同,J和S中的字符都是字母. 字母区分大小写,因此& ...
- Redis自学笔记:3.2入门-字符串类型
3.2字符串类型 实际上redis不只是数据库,更多的公司和团队将redis用作缓存和 队列系统 3.2.1介绍 字符串类型是redis最基本的数据类型,它能存储任何形式的字符串, 包括二进制数据.你 ...
- PIVOT和UNPIVOT使用详解
一.使用PIVOT实现数据表的列转行 建表语句: DROP TABLE STUDENT; CREATE TABLE STUDENT ( 学生编号 BYTE) NULL , 姓名 BYTE) NULL ...
- [BZOJ1814]Formula 1
Description: 一个 m * n 的棋盘,有的格子存在障碍,求经过所有非障碍格子的哈密顿回路个数 Hint: \(n,m<=12\) Solution: 插头dp模板题,注意要讨论多种 ...
- Cow Exhibition [POJ2184] [DP] [背包的负数处理]
题意: 有很多羊,每只羊有一个幽默度和智商,要选出一些羊,智商加幽默度总和最大,其中智商总和和幽默度总和都不能是负数. 样例输入: 5 -5 7 8 -6 6 -3 2 1 -8 -5 样例输出: 8 ...
- NHibernate查询优化的相关资料
一.http://www.cnblogs.com/dddd218/archive/2009/09/01/1557640.html 1.立即加载(lazy=false)并不能在所有情况下都会减少SQL语 ...
- HTML常用标签1
1 html html:超文本标记(标签)语言 通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则 浏览器渲染的顺序:从上到下,从左到右 对于不同的浏览器,对同一标签可能会有不完全 ...
- Deepin 15.4 编译安装 LNMP(PHP 5.6.31 + Nginx 1.12.1 + MySQL 5.6.36)
先查看先前的文章:Ubuntu 14 编译安装 PHP 5.4.45 + Nginx 1.4.7 + MySQL 5.6.26 笔记 编译 Nginx #安装依赖库 sudo apt-get -y i ...