委托的作用: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开发要点精讲》读书笔记(四)的更多相关文章

  1. JAVA编程思想读书笔记(四)--对象的克隆

    接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...

  2. JAVA编程思想读书笔记(五)--多线程

    接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/detail ...

  3. JAVA编程思想读书笔记(二)--容器

    接上篇JAVA编程思想读书笔记(一) 第八章.对象的容纳 No1: java提供了四种类型的集合类:Vector(矢量).BitSet(位集).Stack(堆栈).Hashtable(散列表) No2 ...

  4. JAVA编程思想读书笔记(三)--RTTI

    接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...

  5. Java编程思想读书笔记之内部类

    现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始 ...

  6. Java编程思想读书笔记(一)【对象导论】

    2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...

  7. <Java编程思想>读书笔记(1)-对象导论、一切都是对象

    1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消 ...

  8. Java编程思想读书笔记(二)【一切都是对象】

    begin 2018年1月9日17:06:47 第二章 一切都是对象 Java语言假设我们只进行面向对象的程序设计. 2.1 用引用操纵对象 每种编程语言都有自己的操纵内存元素的方式 操纵内存元素的方 ...

  9. Java编程思想读书笔记

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  10. java编程思想读书笔记三(11-21)

    十一:持有对象 >持有对象实例 ●数组将数字与对象联系起来.它保存类型明确的对象,查询对象时,不需要对结果做类型转换.他可以是多维的. 可以保存基本的数据类型.但是,数组一旦生成,容量就不会在变 ...

随机推荐

  1. python3下GUI界面设计之控件精确定位

    #codeing:utf-8import tkinterimport tkinter.messageboxfrom tkinter import filedialogfrom tkinter impo ...

  2. django后台admin csv 格式表格导出

    1.在app下新建一个.py文件  此例commen.py commen.py (内容)(具体怎么导出的也不知道这么写就对了) import csv from django.http import H ...

  3. NSIS 查找目录下的所有文件夹

    在制作安装包的时候,需要查看下某一目录下的所有文件夹的名称.经过查资料发现需要用到NSIS 的一个插件Locate.下载该插件后,会在NSIS的安装目录 ...Program Files\NSIS\P ...

  4. NamedParameterJdbcTemplate

    NamedParameterJdbcTemplate 在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参 ...

  5. win7 升级Power Shell到4.0

    因为用到EntityFrameworkCore ,想使用scaffold 来生成models. 提示我power Shell 2.0不支持命令,然后需要升级PS. PS  win7 升级文件下载地址是 ...

  6. 自然语言推断(NLI)、文本相似度相关开源项目推荐(Pytorch 实现)

    Awesome-Repositories-for-NLI-and-Semantic-Similarity mainly record pytorch implementations for NLI a ...

  7. C# 异步机制

    Delegate.Invoke Delegate.Invoke is used to execute a delegate on the current thread. A delegate is j ...

  8. 【原创】控制perl和python脚本执行过程中脚本文件是否关闭的方法

    引子 跟踪perl和python脚本对文件的访问,实际过程中,perl和python解析器在解析完脚本后,直接关闭了 脚本文件,在进程中查询不到是访问文件的脚本文件名称. shell.perl和pyt ...

  9. Intel 82599网卡异常挂死原因

    前提背景: 生产环境上,服务器网络突然断链,ssh连接失败. 问题初步定位: 查找内核日志,得到网卡异常信息 Jan 24 11:52:43 localhost kernel: ixgbe 0000: ...

  10. C语言基础01

    1. 用scanf清理缓冲区数据 scanf("%*[^\n]"); scanf("%*c"); 2. 格式转换 将无符号整型数value转换成字符串并返回该字 ...