《修炼之道:.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)
十一:持有对象 >持有对象实例 ●数组将数字与对象联系起来.它保存类型明确的对象,查询对象时,不需要对结果做类型转换.他可以是多维的. 可以保存基本的数据类型.但是,数组一旦生成,容量就不会在变 ...
随机推荐
- WebService连接winfrom简单实例
C# 创建.部署和调用WebService的简单示例 webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互. 具体详细用法可去查询资料.下面开始创建一个简单的webservic ...
- Open SuSE虚拟机分辨率不能自适应的解决办法
装了一个比较老版本的open SuSE(12.3),即使编译安装VMtools之后分辨率依然不能自适应. 解决办法是手工运行下vmware-user-suid-wrapper这个命令即可解决.而且运行 ...
- cenos 修改静态ip
修改为静态ip 1)在终端命令窗口中输入 [root@hadoop101 /]#vim /etc/udev/rules.d/70-persistent-net.rules 进入如下页面,删除eth0该 ...
- 解析如何实现微信唤醒默认浏览器下载app教程!
前言 现如今微信对第三方app下载链接的拦截是越来越严格了,下载链接在微信中分享转发经常会被拦截,一旦被拦截用户就只能复制链接手动打开浏览器粘贴才能访问,如此给用户带来的体验台差,用户量无法有效地累积 ...
- 不学无术的下场——OO第一单元总结
第一单元OO作业总结 第一次作业 第一次作业的要求是对仅有常数和幂函数的式子进行求导. 由于是第一次接触JAVA,对很多东西都还不熟悉,尤其是正则表达式做得不好.当时我的思路如下: 建立Pol ...
- Sql Server数据库之存储过程
阅读目录 一:存储过程概述 二:存储过程分类 三:创建存储过程 1.创建无参存储过程 2.修改存储过程 3.删除存储过程 4.重命名存储过程 5.创建带参数的存储过程 简单来说,存储过程就是一条或 ...
- jsp Servlet 文件上传
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Grafana报警--通知渠道配置
最近研究了prometheus+grafana的系统监控,使用grafana的报警功能,grafana支持很多种通知渠道,下文记录使用到的几种notification channels,分别是emai ...
- Linux服务器部署javaweb项目,从环境配置,到最终系统运行
部署准备:javaJDK1.7,Tomcat7.0,MySQL5.8,可运行的javaWeb项目,linux环境的服务器(可以是安装在windows电脑上的linux虚拟机,安装了linux系统的电脑 ...
- 3D Math Keynote 2
[3D Math Keynote 2] 1.方向(diretion),指的是前方朝向.方位(orientation),指的是head.pitch.roll. 2.欧拉角的缺点: 1)给定方位的表达式不 ...