08 2014 档案

摘要:分析问题 委托的功能和其名字非常类似,在设计中其思想在于把工作委派给其他特定的类型或者组件。委托的使用者可以理解为工作的分派者,在通常情况下使用者清楚地知道哪些工作需要执行、执行的结果又是什么,但是他却不会亲自地去做这些工作,而是恰当地把这些工作分派出去。 在本节中,笔者将举一个日志读写的例子,... 阅读全文

posted @ 2014-08-27 11:15 wangjinpeng_study 阅读(653) 评论(0) 推荐(0)

摘要:分析问题 委托的方法可以是无返回的方法,也可以是有返回值的方法。回顾一下委托的使用: Meth a=new Meth(Method1);a+=new Meth(Method2);a+=new Meth(Method3);int returnVal=a(); 当使用类似的代码时,委托链表中各个方... 阅读全文

posted @ 2014-08-26 11:51 wangjinpeng_study 阅读(494) 评论(0) 推荐(0)

摘要:分析问题 在前文中已经介绍了链式委托的基本特性是一个以委托组成的链表,而当委托链上的任何一个委托方法被调用时,其后面的所有委托方法将会被依次顺序调用。那读者可能会产生这样的疑问,委托链上的原始顺序是如何形成的呢?回顾一下之前的代码,我们是如何生成一个链式委托的: //申明一个... 阅读全文

posted @ 2014-08-26 11:16 wangjinpeng_study 阅读(648) 评论(0) 推荐(0)

摘要:分析问题 在前文中,笔者已经详细地介绍了委托的基本概念。而所谓的链式委托,即是一个由委托组成的链表。所有的自定义委托都直接继承自System.MulticastDelegate类型。这个类型即是为链式委托而设计的。所以说,所有的自定义委托都天生地具备了成为一个链式委托的能力。当当个以上的委托被链接... 阅读全文

posted @ 2014-08-26 10:19 wangjinpeng_study 阅读(526) 评论(0) 推荐(0)

摘要:分析问题 在开始分析委托内部构造之前,先来回顾一下最基本的概念,在C#中,静态方法和实例方法分别指什么,两者有什么区别。和其他大部分面向对象的高级语言相同,在C#中静态方法由关键字static来定义,静态方法可以通过类名来访问而不需要任何实例对象,相应的,在静态方法中不能访问类型中任何非静态成员。... 阅读全文

posted @ 2014-08-25 17:30 wangjinpeng_study 阅读(1710) 评论(0) 推荐(0)

摘要:分析问题 委托这一概念对于有过C++经验的程序员来说并不陌生,C++中的函数指针和委托确实非常相似,许多程序员也喜欢把.NET中的委托称呼为安全的函数指针,无论这一说法是否正确,但委托确实实现了和函数指针非常类似的功能,那就是提供了程序回调指定方法的机制。 在委托的内部,包含了一个指向某个方法的... 阅读全文

posted @ 2014-08-25 16:31 wangjinpeng_study 阅读(162) 评论(0) 推荐(0)

摘要:分析问题 所谓的方法重入,是一个有关多线程编程的概念。程序中多个线程同时运行时,就可能发生同一个方法被多个线程同时调用的情况。当这个方法中存在一些非线程安全的代码时,方法重入就会导致数据不一致的情况,这是非常严重的Bug。 在前文中,笔者已经简要介绍了.NET的内建定时器类型,它们是: 1、S... 阅读全文

posted @ 2014-08-25 15:33 wangjinpeng_study 阅读(227) 评论(0) 推荐(0)

摘要:分析问题 在.NET内建类型中,一共为程序员提供了3种定时器: 1、System.Windows.Forms.Timer类型。 2、System.Threading.Timer类型。 3、System.Timers.Timer类型。 概况来说,这三种类型都实现了定时的功能。程序员通常需要做... 阅读全文

posted @ 2014-08-25 14:32 wangjinpeng_study 阅读(322) 评论(0) 推荐(0)

摘要:分析问题 FileSystemWatcher类型定义在System.IO命名空间下,它的功能是监控某个文件夹下特定文件系统的变化。这样的变化可以包括创建、文件修改、重命名、删除等。程序员可以通过设置一个NotifyFilters枚举类型的成员来订阅感兴趣的信息。下表列出了NotifyFilters... 阅读全文

posted @ 2014-08-19 19:44 wangjinpeng_study 阅读(2002) 评论(0) 推荐(0)

摘要:分析问题 1、FileInfo类型。 FielInfo类型提供了查看状态、创建、复制、删除、移动和打开文件的实例方法,类型的使用方法非常简单,但功能却十分强大。和File类型的区别在于: (1)FileInfo可以针对某个文件生成具体的实例,而File是静态类。 (2)FileInfo致力于... 阅读全文

posted @ 2014-08-19 18:58 wangjinpeng_study 阅读(254) 评论(0) 推荐(0)

摘要:分析问题 IFormatProvider的设计思想是站在类型使用者的角度来提供格式化的方法,这和前文中介绍的IFormattable接口站在类型设计者的角度不同。IFormatProvider只包含了一个方法:object GetFormat(Type formatType)。该方法根据对象的类型... 阅读全文

posted @ 2014-08-19 16:54 wangjinpeng_study 阅读(179) 评论(0) 推荐(0)

摘要:分析问题 在设计类型时,程序员应该尽量为类型使用者着想,其中重要的一点就是提供格式化的字符串输出。为类型编写格式化输出接口,类型自身和其使用者都将得到收益。对于一些类型,重写基类中的ToString方法就已经足够了,但对于有些类型,则需要提供多种格式的输出,这个时候ToString方法就不能满足需... 阅读全文

posted @ 2014-08-19 15:09 wangjinpeng_study 阅读(286) 评论(0) 推荐(0)

摘要:分析问题 UTC其实就是格林威治标准时间(GMT),它是在0度经度测量到的时间,每个地域的本地时间都和UTC时间有一个固定的时间差,有些地域实行夏令时,则那些地域的本地时间就是UTC时间加上时差再加上夏令时的影响。 在本书前面的章节中已经介绍了,DateTime中用来存储时间的64位长整数只使用... 阅读全文

posted @ 2014-08-19 14:38 wangjinpeng_study 阅读(2164) 评论(0) 推荐(0)

摘要:分析问题 DateTime对象输出到字符串的使用概率非常高,DateTime结构实现了四个ToString方法,下表列出了四个方法的特性:方法说明ToString()效果等同于ToString("G")和ToString("G",null)DateTime.ToString(IFormatProv... 阅读全文

posted @ 2014-08-19 14:20 wangjinpeng_study 阅读(507) 评论(0) 推荐(0)

摘要:分析问题 System.DateTime提供了时间的存储和操作。一个DateTime的对象,就表示了某个时间点。.NET小组把DateTime设计成结构,所以DateTime是值类型的。 和很多其他系统一样,DateTime结构使用一个长正数来存储时间,并且通过只读公共属性Ticks提供访问接口... 阅读全文

posted @ 2014-08-19 11:35 wangjinpeng_study 阅读(574) 评论(0) 推荐(0)

摘要:分析问题 GetHashCode方法的功能是根据当前对象返回一个散列值,可以用来在数据结构算法或哈希算法中使用。GetHashCode算法的根本要求是同一个类型对象调用GetHashCode必须返回相同的值,更进一步的,相等的对象必须返回相同的值,这样才能使得这个散列值可以用在容器算法中。 Ge... 阅读全文

posted @ 2014-08-19 11:17 wangjinpeng_study 阅读(1585) 评论(0) 推荐(0)

摘要:分析问题 在本书前面的章节中,笔者已经介绍过System.Object中的所有方法。而其中有三个方法被设计用来进行对象的比较,它们是: (1)、static bool ReferenceEquals(object A,object B)。 (2)、static bool Equals(obje... 阅读全文

posted @ 2014-08-15 08:54 wangjinpeng_study 阅读(478) 评论(0) 推荐(0)

摘要:分析问题 可能读者的固有思维认为.NET中所有的类型都必须继承自System.Object,这样的认识过于绝对,且不完全正确。在.NET中,.NET设计小组为中间语言的编译器ILasm.exe添加了noautoinherit开关,当这个开关被打开时,编译器将不会默认年地把类型认为继承自System... 阅读全文

posted @ 2014-08-15 07:53 wangjinpeng_study 阅读(269) 评论(0) 推荐(0)

摘要:分析问题 在其他很多编程语言(比如C++)中,实现序列化和反序列化的过程往往需要程序员手动地编写代码。而.NET中提供的Serializable特性却帮助程序员非常便捷地申明一个可序列化的类型。但是,便捷的同时往往意味着缺乏灵活性。很多时候,由于业务逻辑的要求,程序员往往需要主动地控制序列化和反序... 阅读全文

posted @ 2014-08-14 18:57 wangjinpeng_study 阅读(1037) 评论(0) 推荐(0)

摘要:分析问题 为了序列化具体实例到某种专业的格式,.NET提供了三种对象序列格式化类型:BinaryFormatter、SoapFormatter和XmlSerializer。 BinaryFormatter用于将可序列化的对象序列化成二进制的字节流,而SoapFormatter则致力于把可序列化的... 阅读全文

posted @ 2014-08-14 17:17 wangjinpeng_study 阅读(1007) 评论(0) 推荐(0)

摘要:分析问题 对象实例的序列化,是指把实例对象转换为可方便存储、传输和交互的流。而对象的实例则包含类型的成员变量、类型的名称以及对象所在的程序集等信息。在.NET中,通过Serializable特性提供了序列化对象实例的机制。当一个类型被申明为Serializable后,它就能被诸如BinaryFor... 阅读全文

posted @ 2014-08-14 16:35 wangjinpeng_study 阅读(739) 评论(0) 推荐(0)

摘要:分析问题 由于网络的带宽限制、硬盘内存空间限制等原因,文件和数据的压缩是程序员经常会遇到的一个需求。针对此.NET类库中提供了对于压缩和解压的支持:GZipStream类型和DeflateStream类型,它们都被定义在System.IO.Compression命名空间下,两者都继承自Stream... 阅读全文

posted @ 2014-08-14 11:50 wangjinpeng_study 阅读(324) 评论(0) 推荐(0)

摘要:分析问题 流是一种对于字节流的直接操作。例如在处理一个文件时,本质上需要通过操作系统提供的API来进行文件打开,读取文件中的字节流,再关闭文件等操作,而读取文件的过程就可以看作字节流的一个过程。常见的流类型有文件流、终端操作流、网络Socket等。 在.NET中,System.IO.Stream... 阅读全文

posted @ 2014-08-14 11:07 wangjinpeng_study 阅读(601) 评论(0) 推荐(0)

摘要:分析问题 标准模版库(STL)实在惠普实验室开发出来的一套算法类库的集合,从概念上主要区分为三大部分: 1、算法(algorithm)。 2、容器(container)。 3、迭代器(iterrator)。 STL的设计都致力于打造通用的算法和类库,例如一个排序的算法,可能针对包含不同类型... 阅读全文

posted @ 2014-08-14 08:32 wangjinpeng_study 阅读(420) 评论(0) 推荐(0)

摘要:分析问题 当一个泛型参数没有任何约束时,它可以进行的操作和运算是非常有限的,因为不能对实参做任何类型上的保证,这时候就需要用到泛型的约束。泛型的主要约束和次要约束都是指泛型的实参必须满足一定的规范,C#编译器在编译的过程中可以根据约束来检查所有泛型类型的实参并确保其满足约束条件。 一个泛型参数可... 阅读全文

posted @ 2014-08-14 08:07 wangjinpeng_study 阅读(1178) 评论(0) 推荐(0)

摘要:分析问题 泛型的语法和概念非常类似于C++中的模版,泛型和C++中模版的设计是为了方便设计一些更加通用的类型,而在.NET中泛型还有另外一个重要作用,那就是避免容器操作中的装箱和拆箱动作。以下代码是一个简单的泛型例子:using System;namespace Test{ class Ma... 阅读全文

posted @ 2014-08-14 07:41 wangjinpeng_study 阅读(407) 评论(0) 推荐(0)

摘要:分析问题 在程序中,类型转换无处不在,数组类型也不例外。对于普通的类型,子类对象可以隐式地转换为父类类型,所有的数组类型都继承自System.Array类型,不存在相互间的关系,但隐式转换仍然被允许,其机制如下: 1、包含值类型项目的数组不能隐式地转换成其他任何类型。 2、两个数组类型能够相互... 阅读全文

posted @ 2014-08-14 07:16 wangjinpeng_study 阅读(606) 评论(0) 推荐(0)

摘要:分析问题 .NET所有数据都以类型的方式表示,数组也不例外。存储不同类型项目的数组都是一个类型,.NET会自动地为数组生成新的类型。例如下列申明:DateTime[] times; CLR就会在运行时创建一个DateTime[]类型,所以数组类型可以说是一个类型族,而它们的共性就是所有的数组类型... 阅读全文

posted @ 2014-08-13 17:39 wangjinpeng_study 阅读(1599) 评论(0) 推荐(0)

摘要:分析问题 由于字符串的不可变性,程序中对用一字符串的大量修改或者对多个引用赋值同一字符串理论上会产生大量的临时字符串对象,这会极大程度地降低系统的性能。对于前者,可以使用StringBuilder类型来解决问题,这在前面章节中已经有所介绍了,而对于后者,.NET提供了另外一种不透明的机制来帮助优化... 阅读全文

posted @ 2014-08-13 11:07 wangjinpeng_study 阅读(206) 评论(0) 推荐(0)

摘要:分析问题 System.Security.SecureString被设计用来保存一些机密的字符串,完成传统字符串所不能做到的工作。传统字符串以明码的形式分配在内存上,一个简单的内存读写软件可以轻易地捕获这些字符串,这在有些机密系统中是不被允许的。读者可能觉得对字符串加密会解决类似的问题,但事实上对... 阅读全文

posted @ 2014-08-13 10:44 wangjinpeng_study 阅读(315) 评论(0) 推荐(0)

摘要:分析问题 和传统的编码不同,BASE64编码的设计致力于混淆那些8位字节的数据流。在网络传输、邮件等系统中,BASE64的编码方式被广泛的应用。BASE64不属于机密机制,但它确实把明码编程了一种很难识别的形式。注意 BASE64的算法十分简单,BASE64把所有的位分开,并且重新组合成字节,新... 阅读全文

posted @ 2014-08-13 09:56 wangjinpeng_study 阅读(746) 评论(0) 推荐(0)

摘要:分析问题 字符串和字节数组之间的转换,事实上代表了现实世界信息和数字世界信息之间的转换,要理解其中的机制,需要先了解一下几个概念。 1、比特。 比特(bit)是指一个位,它可以说是计算机内物理保存的最近本单元。现在的计算机体系采用二进制逻辑,即一个基本单元可以保存两种数值:0和1。这是因为0、... 阅读全文

posted @ 2014-08-13 09:04 wangjinpeng_study 阅读(1541) 评论(0) 推荐(0)

摘要:分析问题 String的性能问题产生于其内容不可修改的特性。当一个字符串对象被修改、插入、连接、截断时,新的字符串对象将被分配,这会影响性能。更加常见的情况是,一个字符串对象的最终生成需要经过一个组装的过程,而在这个组装过程中必将产生很多的临时字符串对象。这些对象在堆上分配,需要垃圾回收器来回收,... 阅读全文

posted @ 2014-08-13 08:27 wangjinpeng_study 阅读(380) 评论(0) 推荐(0)

摘要:分析问题 通过查看System.String类型的元数据可以看到,System.String是直接继承自System.Object的一个子类。在前面章节中笔者已经介绍了,所有直接或间接继承自System.ValueType的类型属于值类型,所以,System.String属于引用类型而非值类型。但... 阅读全文

posted @ 2014-08-13 07:53 wangjinpeng_study 阅读(276) 评论(0) 推荐(0)

摘要:分析问题 程序员经常会面临一些类型转行的工作,其中有些是确定可转换的,例如把一个类型对象转换成基类对象,而有些则是带有尝试性的,譬如把基类引用的对象转换成子类,当执行这样的尝试性转换时,程序员就应该做好捕捉异常的准备。 当一个不正确的类型转行发生时,就会产生InvalidCastExceptio... 阅读全文

posted @ 2014-08-13 07:31 wangjinpeng_study 阅读(661) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-12 18:07 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-12 08:59 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-12 08:43 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-12 07:58 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-12 07:13 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 18:56 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 18:21 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 17:45 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 14:08 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 13:24 wangjinpeng_study 阅读(1) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 11:27 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 10:35 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 09:58 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 09:31 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 08:34 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 08:22 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-11 08:00 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 18:55 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 18:40 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 18:05 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 17:42 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 12:53 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 12:18 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 11:37 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 10:58 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 10:45 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 10:27 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 10:02 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-10 09:31 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-09 10:09 wangjinpeng_study 阅读(1) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-09 05:21 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-09 05:09 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-09 04:56 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-09 04:27 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-09 04:04 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-09 03:59 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-09 03:48 wangjinpeng_study 阅读(0) 评论(0) 推荐(0)

该文被密码保护。

posted @ 2014-08-08 12:35 wangjinpeng_study 阅读(1) 评论(0) 推荐(0)

导航