《修炼之道:.NET开发要点精讲》读书笔记(四)
委托的作用:1)它允许把方法作为参数,传递给其它的模块;2)它允许我们同时调用多个具有相同签名的方法;3)它允许我们异步调用任何方法。
“方法签名”指方法的参数个数、参数类型以及返回值等,具有相同签名的两个方法参数列表一致,返回值一致(名称可以不一样)。
强引用的优点是程序中只要有强引用的存在,就一定能够访问到堆中的对象实例。
理论上来说,任何一个方法,通过委托包装后,都可以实现异步调用。
public IAsyncResult BeginInvoke(int arg1,string arg2,AsyncCallBack callback,object asyncState);
public int EndInvoke(IAsyncResult ar);
如上代码 所示, BeginInvoke B表示开始异步调用委托 ,它带有四个参数(不同的示开始异步调用委托 ,它带有四个参数(不同的示开始异步调用委托 ,它带有四个参数(不同的示开始异步调用委托 , 前面两个跟委托签名中的 一致,后前面两个跟委托签名中的 一致,后callback表示异步调 用完毕后需要用的 回调方法(该参数可以为空,后面详细讲到),最asyncState表示给异步调用过程传 表示给异步调用过程传 表示给异步调用过程传 表示给异步调用过程传 递的一个附加参数(可以为空)。
BeginInvoke返回一个 IAsyncResult接口类型,它可以唯一区分一个异步调 用过程, BeginInvoke一执行马上返回,不会阻塞调用线程。 一执行马上返回,不会阻塞调用线程。 EndInvoke表示结束 对委托的异步调用,但这并不意味着它可以中断过程如果还未结束EndInvoke只能等待,直到异步调用过程结束。另外如果委托 只能等待,直到异步调用过程结束。
如果异步调用过程有异常,那么该异常会在我们在调用EndInvoke方法是抛出,所以我们在调用EndInvoke方法是,一定要把它放在try/catch块中。
异步编程时的注意事项:1)注意“线程安全”问题;2)在有些场合,数量众多、耗时太长的操作最好不要使用异步编程,而改成直接使用多线程的方法(Worker-Thread);3)如果需要使用异步执行的结果,最好等在EndInvoke方法返回之后。
组件仅指.NET编程过程中实现了System.ComponentModel.IComponent接口的类型。
windowsForms中所有的控件均派生自Control类,Control类又属于组件,因此所有控件均具备组件的特性。
逻辑容器存在的真正目的,那就是为所有属于该容器的组件提供服务,使组件与组件之间能够自由交互。
在我们向窗体设计器中拖动控件的时候,是会执行类似“new Button();”这样的代码,在内存中实例化一个组件实例。能够被窗体设计器设计的想Imagelist、Timer等以及所有的控件都属于“组件”,他们都派生自System.ComponentModel.Componet类型。
WINDOWS桌面应用程序分为五个部分:1)消息队列,负责缓存即将被当前线程处理的队列消息;2)UI线程,包含消息循环结构,是应用程序中处理所有与界面有关逻辑的线程;3)窗体,这里的窗体可以看作“窗体句柄”,系统中区分窗体的唯一标示;4)窗体属性,与窗体相关的属性,比如背景色、字体等;5)方法,操作窗体的方法,比如移动、创建窗体等,当然也包括窗口过程。WINDOWS程序中包含三个部分:消息队列、UI线程一控件。
System.Windows.Forms命名空间中的类型主要分以下几类:1)控件,以Control类为基类,主要负责界面显示;2)委托,控件激发事件的委托类型;3)事件参数,控件激发事件时传递的参数;4)枚举,跟控件显示有关的属性值;其它功能类,比如Application类,控制整个WINForm程序。
两种Socket网络编程方式:TCP编程以及UDP编程。
一个程序可以绑定(占有)多个端口,多个端口同时与外界进行数据交换。
TCP通信特点:可靠性、顺序性、高损耗。
UDP通信特点:不可靠行、无序性、低损耗。
Socket 通信编程的类型主要包含5 种,其中Socket 类型负责实现TCP、UDP 通信中的连接、数据的收发等操作 ,TcpListener 和TcpClient 均是对Socket 类型的一个封装,专门用于TCP 通信,因此内聚性比Socket 类型更
高,同样的,UdpClient 也是对Socket类型的一个封装,专门用于UDP 通信,内聚性也比Socket 类型更高。
服务端主要包含五个重要部分:数据发送、数据解析、数据分析、数据接收泵(循环)和侦听泵(循环)。客户端包含四个重要部分:数据发送、数据解析、数据接收泵(循环)、用户输入泵(循环)。其中数据发送和数据解析更服务端一致。
HTTP协议是面向无连接的,是指web服务器一次连接只处理一个请求,请求处理完毕后,连接关闭,六款蓝旗在前一次请求结束到下一次请求开始之前这段时间,它是处于“断开”状态的,因此我们称HTTP协议是“无连接”协议。
封装的原则:1)迪米特法则,最小只是原则;2)一个类型的内部代码可以任意改变,而不应该影响对外公开的接口;3)具体实现细节隐藏在系统内部。
继承包括两种方式,一种为“类继承”,一种为“接口继承”:1)类继承强调了族群关系,而接口继承强调通用功能。类继承中的积累和派生类属于祖宗和子孙的关系,而接口继承中的接口和实现了接口的类型并没有这种关系。2)类继承强调“我是(Is-A)”的关系,派生类“是”积累,而接口继承强调“我能做(Can-Do)"的关系,实现了接口的类型具有接口中规定的行为能力(因此接口在命名时均以”able“作为后缀)。3)类继承中,积累虽然较抽象,但是它是可以有具体的实现,而接口继承中,接口不允许有任何的具体实现。
继承的原则:1)里氏替换原则;2)控制好类型的继承层次;3)继承强调类型之间的通性,而非特性。
依赖产生的原因:1)继承;2)成员对象;3) 传递参数;4)临时变量
《修炼之道:.NET开发要点精讲》读书笔记(四)的更多相关文章
- JAVA编程思想读书笔记(四)--对象的克隆
接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...
- JAVA编程思想读书笔记(五)--多线程
接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/detail ...
- JAVA编程思想读书笔记(二)--容器
接上篇JAVA编程思想读书笔记(一) 第八章.对象的容纳 No1: java提供了四种类型的集合类:Vector(矢量).BitSet(位集).Stack(堆栈).Hashtable(散列表) No2 ...
- JAVA编程思想读书笔记(三)--RTTI
接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...
- Java编程思想读书笔记之内部类
现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始 ...
- Java编程思想读书笔记(一)【对象导论】
2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...
- <Java编程思想>读书笔记(1)-对象导论、一切都是对象
1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消 ...
- Java编程思想读书笔记(二)【一切都是对象】
begin 2018年1月9日17:06:47 第二章 一切都是对象 Java语言假设我们只进行面向对象的程序设计. 2.1 用引用操纵对象 每种编程语言都有自己的操纵内存元素的方式 操纵内存元素的方 ...
- Java编程思想读书笔记
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- java编程思想读书笔记三(11-21)
十一:持有对象 >持有对象实例 ●数组将数字与对象联系起来.它保存类型明确的对象,查询对象时,不需要对结果做类型转换.他可以是多维的. 可以保存基本的数据类型.但是,数组一旦生成,容量就不会在变 ...
随机推荐
- js基本知识
1.js中的数据类型: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型. 2.typeof 返回的是字符串,有 ...
- EXCEL文本字符串转日期
=IF(ISERROR(DATEVALUE(A2)), A2, DATEVALUE(A2)) 注意ISERROR函数的使用,如果DATEVALUE解析字符串失败,比如单元格数值本来就是日期,会发挥#V ...
- MM-委外业务
SAP MM-分包业务讲解(subcontracting)-01-主数据与采购订单的创建 SAP MM-分包业务讲解(subcontracting)-02-主数据与采购订单的创建-多BOM的业务情况分 ...
- JVM-如何判断对象存活与否与CMS收集器和G1收集器的区别
JVM如何判断对象存活? 1.计数器 2.可达性分析 (很多主流语言采用这种方法来判断对象是否存活) 计数器:每当有一个地方引用该对象时,计数器 +1:引用失效则 -1: 优点:实现简单,判定效率 ...
- 不同应用共享redis应用,但分数据库存储数据
日常开发工作中,常常遇到这种情况 项目A ,需要使用redis 项目B ,也需使用redis …… 原来傻乎乎的在服务器上装几个redis,通过不同的端口号来进行使用 其实redis可用有16个数据库 ...
- 小A与小B-(双向bfs)
链接:https://ac.nowcoder.com/acm/contest/549/G来源:牛客网 题目描述 小A与小B这次两个人都被困在了迷宫里面的两个不同的位置,而他们希望能够迅速找到对方,然后 ...
- Set集合特点
1,无序(存储和读取的顺序可能不一样) 2,不允许重复(要求元素唯一) 3,无索引
- Mysql JSON字段提取某一个属性值的函数
mysql从5.7开始才支持JSON_EXTRACT等 JSON相关的函数, 项目里用到的mysql是5.6的,需要提取JSON字段里某一个属性值进行统计, 自己写了一个笨的提取方法: CREATE ...
- Python库 - Albumentations 图片数据增强库
Python图像处理库 - Albumentations,可用于深度学习中网络训练时的图片数据增强. Albumentations 图像数据增强库特点: 基于高度优化的 OpenCV 库实现图像快速数 ...
- JS-正则表达式 限制输入整数、小数
//只可以输入整数 onkeyup="value=value.replace(/[^\d]/g,'')" //可以输入数字 包括小数 onkeyup="value=val ...