《修炼之道:.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)
十一:持有对象 >持有对象实例 ●数组将数字与对象联系起来.它保存类型明确的对象,查询对象时,不需要对结果做类型转换.他可以是多维的. 可以保存基本的数据类型.但是,数组一旦生成,容量就不会在变 ...
随机推荐
- JAVA学习记录(一)————JAVA中的集合类
这个图是总体的框架图,主要是两个接口Collection和Map都继承接口Iterator(Iterable),为了实现可以使用迭代器.Collection和Map类似平级关系. 1.这里我先学习下A ...
- 内核驱动程序中如何读写user space的文件,方便调试程序
需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据.但是在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有: filp_open() f ...
- Python爬虫与数据分析之模块:内置模块、开源模块、自定义模块
专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...
- 虚拟机上安装django链接Pycharm(版本差异有所差异)
第一,启动虚拟机,配置好虚拟机 第二,workon查看安装那些虚拟环境 第三,创建虚拟环境命令:mkvirtualenv -p /usr/bin/ python3 my_djangou 第四,进入虚拟 ...
- 如果在springboot中设置了 修改了默认页面的指向 使用thymleaf模板 而请求不到静态资源 可能是
@Configurationpublic class DefaultView extends WebMvcConfigurerationSupport { @Override public void ...
- vChart
vue+echarts工具: https://v-charts.js.org
- VS2015环境下的提示语法错误:编号的预期结尾后有多余文本(extra text after expected end of number)
当工程中有扩展CListCtrl的类代码,并且有自绘单元格的操作, ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw) 编辑器语法智能提示就会对这个宏定义 ...
- python入门(十三):面向对象(继承、重写、公有、私有)
1. 三种类定义的写法 class P1:#定义类 加不加()都可以 pass class P2(): #带(),且括号中为空,类定义 pass ...
- 在Tomcat文件中,点击start.bat启动的是另一个tomcat
遇到问题:在下载了一个免安装的Tomcat7之后解压,点击startup.bat启动tomcat,却报了异常. 后来在电脑一个文件夹中发现了另一个Tomcat8,是安装版本,并配置了环境变量.其环境变 ...
- 【笔记】Python基础四:迭代器和生成器
一,迭代器协议和for循环工作机制 (一),迭代器协议 1,迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,以终止迭代(只能往 ...