摘要: 重复的代码(Duplicated Code) 过长的函数(Long Method) 过大类(Large Class) 过长的参数列(Long Parameter List) 发散式变化(Divergent Change) 霰弹式修改(Shotgun Surgery) 依恋情结(Feature Envy) 数据泥团(Data Clumps) 基本型别偏执(Primitive Obsession) S... 阅读全文
posted @ 2010-04-02 15:37 Gang.Wang 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。 构造委托对象时,通常提供委托将包装的方法的名称或使用匿名方法。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方。这被称为调用委托。可以将一个实例化的... 阅读全文
posted @ 2010-04-02 00:18 Gang.Wang 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 委托是一种定义方法签名的类型,可以与具有兼容签名的任何方法关联。您可以通过委托调用方法。委托用于将方法作为参数传递给其他方法。事件处理程序就是通过委托调用的方法。您可以创建一个自定义方法,当发生特定事件时某个类(例如 Windows 控件)就可以调用您的方法。下面的示例演示了一个委托声明: 与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托。方法可以是静态... 阅读全文
posted @ 2010-04-02 00:03 Gang.Wang 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 下面的准则有助于确保库正确处理异常。 不要在框架代码中捕捉非特定异常(如 System.Exception、System.SystemException 等)以至忽略错误。 如果捕捉异常是为了再次引发或传输给其他线程,则可以捕捉这些异常。下面的代码示例演示的异常处理是不正确的。   避免在应用程序代码中捕捉非特定异常(如 System.Exception、System.System... 阅读全文
posted @ 2010-04-01 00:38 Gang.Wang 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 当某一成员无法成功执行它应执行的操作时,将引发异常。这称为执行故障。例如,如果 Connect 方法无法连接到指定的远程终结点,则这就是一个执行故障,将有一个异常被引发。 下列准则可帮助确保在适当时引发异常。 不要返回错误代码。异常是报告框架中的错误的主要手段。 异常设计准则讨论了使用异常的许多好处。 通过引发异常来报告执行故障。如果某一成员无法按预期方式成功执行,则应将这种情况视为一个执行... 阅读全文
posted @ 2010-04-01 00:33 Gang.Wang 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 枚举提供成组的常数值,它们有助于使成员成为强类型以及提高代码的可读性。枚举分为简单枚举和标志枚举两种。简单枚举包含的值不用于组合,也不用于按位比较。标志枚举应使用按位 OR 操作进行组合。标志枚举值的组合使用按位 AND 操作检查。 下列指南介绍了枚举设计的最佳做法。 一定要使用枚举强类型化参数、属性和表示值集的返回值。 一定要优选使用枚举而不是静态常量。 下面的代码示例演示了不正确的设计。 下... 阅读全文
posted @ 2010-04-01 00:16 Gang.Wang 阅读(558) 评论(0) 推荐(0) 编辑
摘要: 结构是值类型。结构是在堆栈上或以内联方式分配的,当结构超出范围时将被释放。通常情况下,值类型的内存空间分配和释放的开销较小;但在需要大量装箱和取消装箱操作的方案中,值类型的执行性能较引用类型要差。有关更多信息,请参见装箱和取消装箱(C# 编程指南)。 有关值类型和引用类型的更多信息,请参见通用类型系统概述。 不要为结构提供默认的构造函数。 如果某一结构定义了默认构造函数,则在创建该结构的数组... 阅读全文
posted @ 2010-04-01 00:00 Gang.Wang 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 接口定义实施者必须提供的一组成员的签名。接口不能提供成员的实现细节。例如,ICollection 接口定义与使用集合相关的成员。实现该接口的每个类都必须提供这些成员的实现细节。类可以实现多个接口。类定义每个成员的成员签名和实现细节。Abstract(在 Visual Basic 中为 MustInherit)类的行为在某方面与接口或普通类相同,即可以定义成员,可以提供实现细节,但并不要求一定这样做... 阅读全文
posted @ 2010-03-31 20:35 Gang.Wang 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 如前一篇所讲的,我们可以通过调用_CrtDumpMemoryLeaks()这个方法来检查程序是否存在内存泄漏,之后我又试了一下这个代码: 它也是会输出有内存泄漏的信息,可以得到,每调用一次new,系统内部就会记录下这个操作,天知道它不是是存放在一个list之类的结构里面呢!调用一次delete就是从这个结构里删除一条记录,而_CrtDumpMemoryLeaks()方法就是把当前记录里的状态输出。... 阅读全文
posted @ 2010-03-26 00:12 Gang.Wang 阅读(1601) 评论(3) 推荐(1) 编辑
摘要: 我们的代码里会有很多的内存泄漏,如何快速的定位和修复这些内存的泄漏是一项非常重要的技能,在这里分享一下如何从开发的代码里找到这种问题。 常见的C++程序分为两大类:MFC和Win32。先看第一种MFC程序如何找内存泄漏的问题。 MFC程序比较容易一些,因为它已经提供了这个功能,我们新建一个MFC的工程,我们在看到每一个CPP文件里面都有这样一句: DEBUG_NEW 这个宏定义在afx.h文件... 阅读全文
posted @ 2010-03-25 23:36 Gang.Wang 阅读(4772) 评论(2) 推荐(0) 编辑