《修炼之道:.NET开发要点精讲》读书笔记(四)

时间:2021-06-27 07:28:18

委托的作用: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)临时变量