自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

转载 Effective C# Item 35: Prefer Overrides to Event Handlers

Effective C# Item 35: Prefer Overrides to Event Handlers许多.net类库中的类都提供了两种不同的处理事件句柄的方法。既可以为其添加事件,也可以重写其基类的事件抽象方法。为什么要为同一件事提供两种不同的方法呢?这是为了对应不同的情况。在实现派生类的时候,更好的选择是重写基类中的抽象方法。假设我们现在正在...

2007-06-16 19:25:00 112

转载 Effective C# Item 40: Match Your Collection to Your Needs

Effective C# Item 40: Match Your Collection to Your Needs 如果要问 “哪种集合是最好的?”我的回答是:“视需要而定。”不同的集合有不同的功能特性,并且针对其行为的不同进行了优化。.Net Framework支持许多相似的集合:列表、数组、队列、栈等等。另外,C#支持多维数组,其性能特点不同于其它的一维数组或者交错数组...

2007-06-08 14:22:00 124

转载 为程序添加自己的跟踪侦听器

跟踪可以监视应用程序在执行时的情况,获取需要的信息。通过跟踪,可以收集到程序在执行过程中的一些有用的信息。在.Net中可以通过Trace类方便的实现简单的跟踪机制。在默认情况下是使用DefaultTraceListener侦听器对Trace发送的消息进行侦听和存储的。除此之外,.Net Framework还提供了一些特殊化功能的侦听器,同默认侦听器一样,它们都派生自Trace...

2007-06-01 16:26:00 147

转载 Effective C# Item 31: Prefer Small, Simple Functions

Effective C# Item 31: Prefer Small,Simple Functions 对于有经验的程序员来说,不论在接触C#之前使用什么语言,都有一些提高代码效率的方法。不过有些做法虽然在之前的语言中有效,但在.Net环境中却适得其反。这一点在我们尝试手动为C#编译器优化算法时尤为明显。我们的举动往往使得JIT编译无法做出更加有效的优化。那些以优化为目的的...

2007-05-27 21:03:00 125

转载 Effective C# Item 30: Prefer CLS-Compliant Assemblies

Effective C# Item 30: Prefer CLS-Compliant Assemblies .Net环境是与语言无关的:开发者可以不受限制的将各种不同的.Net语言编写的组件结合起来。我们必须创建遵从于CLS(公共语言规范)的程序集以便其他编程语言的开发者可以使用我们的组件。 CLS是每种语言必须支持的操作的子集。要创建一个符合CLS的程序集,...

2007-05-21 14:49:00 102

转载 Chapter 4 Create Binary Components

Chapter 4 Create Binary Components 创建二进制组件和创建类有很多相似之处:我们都在尝试区分和分割功能。它们的区别在于二进制组件可以用来描述那些离散的功能。我们可以创建组件程序集来实现简单的逻辑共享,跨语言编程和简单的程序发布。 在.Net中程序集是一个组件包。每个程序集都可以被独立的发布和升级。升级一个已发布程序集的简易程度取...

2007-04-25 19:35:00 76

转载 Effective C# Item 29: Use the new Modifier Only When Base Class Updates Mandate it

Effective C# Item 29: Use the new Modifier Only When Base Class Updates Mandate it 当我们需要重定义一个基类中非虚的成员时,我们可以使用new修饰符,但这并不意味着我们应该这样做。这种重定义会引起行为上的歧义。大部分程序员看到下面的两端代码时都会认为如果这两个类是继承关系的话,它们的行为应该时...

2007-04-22 11:40:00 70

转载 Effective C# Item 28: Avoid Conversion Operators

Effective C# Item 28: Avoid Conversion Operators 转换操作为我们提供了类之间的一种可置换的关系。这意味着一个类的对象可以被其它类的对象替代。这样的好处在于:一个派生类的对象可以被其基类的对象代替。我们可以参考下图结构。我们创建一个Shape基类和三个派生类:Circle,Ellipse,Square。任何情况下都可以用Circ...

2007-04-14 14:57:00 101

转载 Effective C# Item 27: Avoid ICloneable

Effective C# Item 27: Avoid ICloneable ICloneable听起来不错:通过它我们就可以让类型支持拷贝。但是我们的类往往并不是独立存在的。一旦我们确定要支持ICloneable,那么它的所有派生类也需要实现这个接口。内部的所有成员也需要支持ICloneable或者其它创建拷贝的机制。要实现深克隆经常会带来很多的问题。在理论上IClone...

2007-04-07 16:10:00 95

转载 Effective C# Item 26: Implement Ordering Relations with IComparable and IComparer

Effective C# Item 26: Implement Ordering Relations with IComparable and IComparer 有时候我们需要为类定义排序关系以便在集合中对该类的对象进行排序和检索。在.Net Framework中定义了两种用来描述排序顺序关系的接口:IComparable和IComparer。IComparable接口描...

2007-03-26 11:17:00 93

转载 阿迪耐斯

今天淘鞋时偶然发现的品牌--中国福建晋江阿迪耐斯(一译艾迪耐斯)。光听名字就开始让我鄙视它了,看了看鞋,也是平平无奇,基本都是别人用剩下的东西拿来换个名字而已。难道现在我们的创造力就差到了如此地步么?前两天看一个关于歼10的文章中提到目前的研究工作存在着“三多三少”,大概意思是说:证明西方学者提出的假说多,提出自己的假说少;单一学科研究多,综合学科研究少;模仿研究多,独创研究...

2007-03-23 23:54:00 134

转载 Effective C# Item 25: Prefer Serializable Type

Effective C# Item 25: Prefer Serializable Type 在我们创建自己的类型时,有些基本的特性是容易被忽略的,例如可序列化。如果我们的类型不支持可序列化属性,那么对于使用这些类型的开发人员来说可能需要为此付出一些不必要的工作。如果我们的类型不支持序列化,那么对于使用者来说,想要将其修改为支持序列化是非常困难或者根本不可能做到的。...

2007-03-19 12:04:00 69

转载 Effective C# Item 24: Prefer Declarative to Imperative Programming

Effective C# Item 24: Prefer Declarative to Imperative Programming 声明式编程是一种简洁的程序行为描述方式。声明式编程让我们可以通过使用声明来达到定义程序行为的目的。在C#或者其它的编程语言中,命令式编程是最为常见的:我们通过编写方法来定义程序的行为。我们可以通过C#中的属性来使用声明式编程。我们可以为类,方...

2007-03-05 10:56:00 90

转载 Effective C# Item 23: Avoid Returning References to Internal Class Objects

Effective C# Item 23: Avoid Returning References to Internal Class Objects 我们知道定义只读属性可以让调用者无法修改该属性的值。但是并不是在所有情况下这种做法都能达到目的。如果我们创建了一个返回引用类型的属性,那么调用者可以对这些对象成员进行任何的操作,包括那些我们不期望的修改操作。考虑下面这段例子:...

2007-01-29 09:56:00 78

转载 Effective C# Item 22: Define Outgoing Interface With Events

Effective C# Item 22: Define Outgoing Interface With Events 事件为我们的类型定义了对外的接口。事件是通过委托来提供类型安全的函数签名。由于大部分情况下我们使用委托的例子都是事件,这使得我们容易将二者混为一谈。在Item 21中,我们举了不定义事件的委托的例子。当我们的类型在系统中必须与多个客户程序进行信息交互时,我...

2006-12-22 09:09:00 77

转载 使用GZipStream类压缩和解压文件夹

因为要求的压缩和解压非常简单,只有一级目录,而且文件很小,就没有使用SharpZipLib而是自己用.Net 2.0中的GZipStream类写了个简单的。将保存每个文件内容的byte数组和文件名的一个类型的示例放入arraylist里,再对其序列化,压缩序列化的流并保存为压缩包。其实对于多级目录在压缩时对其文件进行递归并在解压时根据文件名称和路径重新构建文件目录就也可以实现...

2006-11-30 09:23:00 335

转载 Effective C# Item 21: Express Callbacks with Delegates

Effective C# Item 21: Express Callbacks with Delegates 爸爸:“儿子,去把院子里的草割一下。我看会儿报。” 儿子:“爸爸,我把院子打扫干净了。” 儿子:“爸爸,我给割草机加了油。” 儿子:“爸爸,割草机发动不了。” 爸爸:“我来发动它。” 儿子:“...

2006-11-23 08:49:00 70

转载 Effective C# Item 20: Distinguish Between Implementing Interfaces and Overriding Virtual Functions

Effective C# Item 20: Distinguish Between Implementing Interfaces and Overriding Virtual Functions 乍看之下,实现接口和重写虚方法是相似的,它们都为一个声明好的成员提供了定义。这种看法是错误的。实现接口和重写虚方法是有很大区别的。在默认情况下,在接口中声明的成员不是虚拟的。派生...

2006-11-13 08:52:00 64

转载 Effective C# Item19: Prefer Defining and Implementing Interfaces to Inheritance

Effective C# Item19: Prefer Defining and Implementing Interfaces to Inheritance 抽象基类为派生类提供继承的祖先,而接口则描述实现它的类型的行为功能。它们各有功能,二者并不相同。接口是一种约定式的设计:一个类型在实现一个接口时必须实现接口中所定义的所有方法。抽象基类则是提供关联类型的一个普通抽象。...

2006-10-31 08:52:00 92

转载 Effective C# Item18: Implement the Standard Dispose Pattern

Effective C#Item18: Implement the Standard Dispose Pattern 释放非托管资源是非常重要的一个环节。对于我们自定义的类型来说,如果需要释放资源,那么我们应当使用.Net Framework的标准模式来释放非托管资源。标准模式使用IDisposable接口来显式释放资源,而当用户忘记释放时使用终结器(finalizer)...

2006-10-27 10:48:00 89

转载 Effective C# Item17: Minimize Boxing and Unboxing

Effective C# Item17: Minimize Boxing and Unboxing 在.Net中有值和引用两种类型,它们是不一致的。.Net Framework使用装箱和拆箱来做为二者之间的桥梁。通过装箱可以将一个值类型封装到一个无类型的引用型对象中。拆箱则是将引用类型从包装中释放出来。当我们需要将值类型当作引用类型一样来处理时,装箱和拆箱是必要的。但是这样...

2006-10-24 09:10:00 105

转载 Effective C# Item 16: Minimize Garbage

Effective C# Item 16: Minimize Garbage 在我们使用C#时,GC(Garbage Collector)会非常好的帮助我们完成对内存资源的管理,它会非常高效的清理没有存在意义的对象。但是不管怎么说,即便再高效的工作,频繁的分配和销毁堆中的对象也会降低效率。如果我们在程序中创建了大量的引用类型,那将会在一定程度上影响到执行的效率。...

2006-10-20 09:19:00 66

转载 Effective C# Item 15: Utilize using and try/finally for Resource Cleanup

Effective C# Item 15: Utilize using and try/finally for Resource Cleanup 当我们使用非托管资源(unmanaged resources)类型时,应当使用IDisposable接口的Dispose()方法来释放资源。在.Net环境中,对非托管资源的回收不是系统的责任,我们必须自己调用Dispose()方法...

2006-10-16 09:10:00 162

转载 Effective C# Item14: Utilize Constructor Chaining

Effective C# Item14: Utilize Constructor Chaining 当我们写类的构造函数的时候经常会有许多种重载版本,它们完成的工作有一部分是重复的。许多开发者往往是先写第一个构造函数,然后拷贝粘贴它们到其他的构造函数当中去。我们应当停止这种做法。当我们发现许多重载的构造函数都包含有一些普遍的算法时,我们应当将这些逻辑集合到构造函数中,形成构...

2006-10-13 09:08:00 77

转载 Effective C# Item13: Initialize Static Class Members with Static Constructiors

Item13: Initialize Static Class Members with Static Constructiors 我们知道应当在创建类型的所有实例之前首先初始化静态成员变量。C#让我们使用静态初始化和静态构造函数来达到这个目的。静态构造函数是一种特殊的函数,它会在类中的所有的方法、成员变量或者属性定义之前运行。我们使用这个方法在类中来声明静态变量,构造si...

2006-10-11 12:48:00 66

转载 Effective C# Item12: Prefer Variable Initializers to Assignment Statements

Item12: Prefer Variable Initializers to Assignment Statements 一般来说一个类会有不止一个构造函数,有的时候会因此而造成成员变量和构造函数的脱节。解决这种问题的最好方法就是当变量声明时就对其进行初始化,而不是初始化工作放到构造函数中。 我们应当在声明成员变量的时候就对其进行初始化。publicc...

2006-09-30 15:20:00 77

转载 Effective C# Chapter 1 小结

经过了将近一个月的时间,终于完成了第一章的学习 + 翻译。第一章的内容是比较基础的,大部分内容可以看成是在讲如何养成良好的编程习惯。除了GetHashCode()那一节之外,其他的内容都是经常会用到的编程技巧。分辨引用和值类型、4种Equals()之间的关系等等也是.Net的基础知识。 还有对于Item 11: Prefer foreach Loops 中fore...

2006-09-27 08:57:00 65

转载 Effective C# Item 11: Prefer foreach Loops

Effective C#Item 11: Prefer foreach Loops 在C#中相比for或者while循环,foreach循环能为任意的集合生成最好的循环代码。它的定义基于.Net Framework中关于集合的接口,C#的编译器可以为不同类型的集合生成最合适的代码。当我们遍历集合时,应当使用foreach来代替其他循环结构。下面是三种循环的代码:int...

2006-09-25 08:50:00 92

转载 精确计算代码执行时间

在一些测试工作时我们需要获得高精度的代码执行时间以比较其效率。最近遇到一个模块其执行时间非常短,但是调用频率非常高。精确计算其运算时间对于提高程序整体效率来说非常重要。 在我刚刚接触.Net时,也曾经想要测试一下自己写的程序的运行时间,当时我使用的是将两个DateTime.Now相减的笨方法,呵呵。后来知道使用Environment.TickCount,对于一般的测...

2006-09-23 11:23:00 159

转载 Effective C# Item 10: Understand the Pitfalls of GetHashCode()

Effective C# Item 10 : Understand the Pitfalls of GetHashCode() 这是本书中唯一一项不推荐大家使用的函数。如果不是为哈希序列(例如HashTable和Dictionary)设定键(key)的话,我们应当尽量避免使用GetHashCode()。这是因为当基类调用GetHashCode时会产生一系列的问题。对于引用类...

2006-09-21 10:51:00 60

转载 Effective C# Item 9: Understand the Relationships Among ReferenceEquals(),static Equals(),instance E...

Effective C# Item 9 : Understand the Relationships Among ReferenceEquals(),static Equals(),instance Equals,and operator== 当我们创建一个类型(不论是类或者结构)时,我们就为其定义了如何判断“相等”的含义。C#提供了四种不同的方法来判断两个对象是否相等:...

2006-09-20 08:45:00 72

转载 Effective C# Item 8: Ensure That 0 Is a Valid State for Value Types

Effective C# Item 8 : Ensure That 0 Is a Valid State for Value Types .Net中默认的初始化是将对象的所有信息都置0。对于值类型来说,我们不能避免在创建新的值类型实例的时候将其值置为0。这是类型的默认值。 唯一一个特殊情况是枚举(enum)。我们不应该创建一个不包含0作为其值的枚举。所有的枚举...

2006-09-16 12:12:00 68

转载 FlagsAttribute属性在enum中的应用

FlagsAttribute属性在enum中的应用 我看了Effective C#一书中的Item 8 : Ensure That 0 Is a Valid State for Value Types时提到了Flags属性在enum中的应用,于是就查了一下资料,写了一点关于这个的体会 .Net C#中枚举的声明格式如下所示:[attributes][modifie...

2006-09-16 12:10:00 95

转载 Effective C# Item7: Prefer Immutable Atomic Value Types

Item7: Prefer Immutable Atomic Value Types 不可变类型很简单:当他们被创建后,它们的值就不可改变。这样可以为我们减少很多负担,否则你必需时时小心这些对象在创建后是否会因修改而改变。不可变类型对于多线程来说也是安全的,它们只能得到相同的结果。不可变类型可以让对象更安全,调用者不能改变它们的内容。不可变类型在基于哈希的集合中工作的很好,O...

2006-09-14 10:52:00 90

转载 Effective C# Item 6: Distinguish Between Value Types and Reference Types

Item 6: Distinguish Between Value Types and Reference Types 值类型还是引用类型?结构体还是类?我们应当用哪个?这不是C++,把所有的类型都定义为值类型,之后我们可以再为其创建引用;这也不是java,所有的类型都是引用类型。当我们创建类型的时候我们必须明确它的行为,这对我们正确能选择值还是引用非常重要。我们必须仔细推敲...

2006-09-11 08:39:00 92

转载 关于.Net WinForm 中的控件失去焦点时触发事件的问题

MSDN上说是按照这个顺序来进行的 Leave--Validating--Validated--LostFocus(不特殊说明时CausesValidation为true)。可是在跟踪代码时发现顺序怎么是LostFocus--Leave--Validating--Validated呢?后来发现原来还和离开的方法有关系。当使用鼠标或直接设置焦点离开的时候顺序应当为LostFo...

2006-09-09 13:24:00 906

转载 Effective C# Item 5: Always Provide ToString()

Item 5: Always Provide ToString() 在.net开发环境中System.Object.ToString()是最常用到的方法之一。我们应当为每个类的客户程序提供恰当的格式化输出信息。对于用户程序来说,通过这个格式化的string可以在Windows Form、web或者控制台中很方便的显示其类型信息,同时还便于调试。我们每创建一个类都应当为它重写符...

2006-09-09 12:18:00 87

转载 IExtenderProvider接口的应用

在Windows Form编程中,如果我们希望实现一个textbox的扩展,例如加入自定义属性或方法,很容易想到的是使用继承自textbox的自定义控件。但是这样做有时会出现一些问题,比如仅仅为了添加一个额外属性就要创建一个的自定义控件是否开销过大?某些继承出来的控件不支持在视图设计器中进行编辑等等。.Net中我们可以使用另一种方法来实现扩展控件的目的,这就是通过IExten...

2006-09-08 10:03:00 194

转载 Effective C# Item 4: Use Conditional Attributes Instead of #if

Item 4: Use Conditional Attributes Instead of #if 我们可以使用#if/#endif从同一源码中生成不同的程序版本,比如debug和release版本,不过它并没有那么好用。#if/#endif很容易造成混乱,代码也难以阅读和调试。开发语言的设计者们意识到这个问题,并且为不同的开发环境创建了更好的生成工具。在C#中就添加了Co...

2006-09-07 10:59:00 69

转载 Effective C# Item 3: Prefer the is or as Operators to Casts

Effective C# Item 3:Prefer the is or as Operators to Casts C#是一种强类型语言。好的编程习惯意味着我们应该尽量避免进行强制的类型转换。但是有些时候这是难以避免的。转换的方式有两种:一是使用as,二是C语言风格的显式类型转换(cast)。更保险的办法是先使用is来判断转换是否成立再使用as或显式类型转换。...

2006-09-02 09:49:00 78

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除