上一页 1 ··· 8 9 10 11 12 13 14 下一页
摘要: 建议21:选择正确的集合要选择正确的集合,首先要了解一些数据结构的知识。所谓数据结构,就是相互之间存在一种或多种特定关系的数据元素的集合。集合的分类参考下图:由于非泛型集合存在效率低及非类型安全的缺点,所以这里只讨论泛型集合。如果集合的数目固定并且不涉及转型,使用数组效率高,否则使用List。顺序存... 阅读全文
posted @ 2015-08-14 15:02 JesseLZJ 阅读(504) 评论(0) 推荐(1) 编辑
摘要: Flyweight 享元模式(结构型模式)面向对象的代价面向对象很好的解决了系统抽象性的问题,同时在大多数情况下也不会损及系统的性能。但是,在某些特殊应用中,由于对象的数量太大,采用面向对象会给系统带来难以承受的内存开销。比如图形应用中的图元等对象、字处理应用中的字符对象等。动机(Motivatio... 阅读全文
posted @ 2015-08-14 12:22 JesseLZJ 阅读(525) 评论(0) 推荐(1) 编辑
摘要: 建议20:使用泛型集合代替非泛型集合在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型。很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情况: ArrayList al=new ArrayList... 阅读全文
posted @ 2015-08-13 23:19 JesseLZJ 阅读(636) 评论(0) 推荐(0) 编辑
摘要: 建议19:使用更有效的对象和集合初始化依赖于属性和FCL 3.5之后的语法规则,现在我们有了更加简洁有效的对象和集合初始化机制:对象和集合初始化设定项。对象初始化: class Person { public string Name { get; set; } ... 阅读全文
posted @ 2015-08-13 22:36 JesseLZJ 阅读(513) 评论(0) 推荐(0) 编辑
摘要: 建议18:foreach不能代替for上一个建议中提到了foreach的两个优点:语法更简单,默认调用Dispose方法,所有我们强烈建议在实际的代码编写中更多的使用foreach。但是,该建议也有不适合的场景。foreach存在一个问题:它不支持循环时对集合进行增删操作。比如,运行下面代码会抛出异... 阅读全文
posted @ 2015-08-13 22:10 JesseLZJ 阅读(1006) 评论(0) 推荐(0) 编辑
摘要: 建议17:多数情况下使用foreach进行循环遍历由于本建议涉及集合的遍历,所以在开始讲解本建议之前,我们不妨来设想一下如何对结合进行遍历。假设存在一个数组,其遍历模式可以采用依据索引来进行遍历的方法;又假设存在一个HashTable,其遍历模式可能是按照键值来进行遍历。无论是哪个集合,如果他们的遍... 阅读全文
posted @ 2015-08-13 21:08 JesseLZJ 阅读(563) 评论(0) 推荐(1) 编辑
摘要: 建议16:元素数量可变的情况下不应使用数组在C#中,数组一旦被创建,长度就不能改变。如果我们需要一个动态且可变长度的集合,就应该使用ArrayList或List来创建。 而数组本身,尤其是一维数组,在遇到要求高效率的算法时,则会专门被优化以提升其效率。一维数组也成为向量,其性能是最佳的,在IL中使用... 阅读全文
posted @ 2015-08-13 17:40 JesseLZJ 阅读(741) 评论(2) 推荐(0) 编辑
摘要: Facade 外观模式(结构型模式)系统的复杂度假设我们要开发一个坦克模式系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎、控制器、车轮、车身等各个子系统构成。 internal class Engine { public void EAction1() ... 阅读全文
posted @ 2015-08-13 14:07 JesseLZJ 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 建议15: 使用dynamic来简化反射实现dynamic是Framework 4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译器默认dynamic对象支持开发者想要的任何特性。比如,即使你对GetDynamicObject方法返回的对象一... 阅读全文
posted @ 2015-08-12 23:16 JesseLZJ 阅读(913) 评论(3) 推荐(0) 编辑
摘要: 建议14: 正确实现浅拷贝和深拷贝为对象创建副本的技术称为拷贝(也叫克隆)。我们将拷贝分为浅拷贝和深拷贝。浅拷贝 将对象中的所有字段复制到新的对象(副本)中。其中,值类型字段的值被复制到副本中后,在副本中的修改不会影响到源对象对应的值。而引用类型的字段被复制到副本中的是引用类型的引用,而不是引用的对... 阅读全文
posted @ 2015-08-12 22:51 JesseLZJ 阅读(761) 评论(0) 推荐(0) 编辑
摘要: 建议13: 为类型输出格式化字符串有两种方法可以为类型提供格式化的字符串输出。一种是意识到类型会产生格式化字符串输出,于是让类型继承接口IFormattable。这对类型来 说,是一种主动实现的方式,要求开发者可以预见类型在格式化方面的要求。更多的时候,类型的使用者需为类型自定义格式化器,这就是第二... 阅读全文
posted @ 2015-08-12 22:38 JesseLZJ 阅读(424) 评论(0) 推荐(0) 编辑
摘要: 建议12: 重写Equals时也要重写GetHashCode除非考虑到自定义类型会被用作基于散列的集合的键值;否则,不建议重写Equals方法,因为这会带来一系列的问题。如果编译上一个建议中的Person这个类型,编译器会提示这样一个信息:“重写 Object.Equals(object o)但不重... 阅读全文
posted @ 2015-08-12 22:00 JesseLZJ 阅读(654) 评论(0) 推荐(0) 编辑
摘要: 建议11: 区别对待==和Equals在开始本建议之前,首先要明确概念“相等性”。CLR中将“相等性”分为两类:“值相等性”和“引用相等性”。如果用来比较的两个变量所包含的数值相等,那么将其定义为“值相等性”;如果比较的两个变量引用的是内存中的同一个对象,那么将其定义为“引用相等性”。无论是操作符“... 阅读全文
posted @ 2015-08-12 21:42 JesseLZJ 阅读(623) 评论(2) 推荐(0) 编辑
摘要: 建议10: 创建对象时需要考虑是否实现比较器有对象的地方就会存在比较,在.NET的世界中也一样。举个最简单的例子,在UI中,有一个10个人的Salary列表。根据排序的需要,列表要支持针对基本工资来罗列Salary。这个时候,接口IComparable就会起作用,代码如下所示: class S... 阅读全文
posted @ 2015-08-12 21:34 JesseLZJ 阅读(626) 评论(0) 推荐(0) 编辑
摘要: 建议9: 习惯重载运算符在开发过程中,应该习惯于使用微软提供给我们的语法特性。我想每个人都喜欢看到这样的语法特性: int x = 1; int y = 2; int total = x + y; 而不是用下面的语法来完成一样的事情: int x = 1; ... 阅读全文
posted @ 2015-08-12 18:04 JesseLZJ 阅读(493) 评论(0) 推荐(0) 编辑
摘要: 建议8: 避免给枚举类型的元素提供显式的值一般情况下,没有必要给枚举类型的元素提供显式的值。创建枚举的理由之一,就是为了代替使用实际的数值。不正确地为枚举类型的元素设定显式的值,会带来意想不到的错误。如果为建议7中的枚举类型Week增加一个元素,代码如下所示: enum Week {... 阅读全文
posted @ 2015-08-12 18:00 JesseLZJ 阅读(610) 评论(0) 推荐(0) 编辑
摘要: 建议7: 将0值作为枚举的默认值允许使用的枚举类型有byte、sbyte、short、ushort、int、uint、long和ulong。应该始终将0值作为枚举类型的默认值。不过,这样做不是因为允许使用的枚举类型在声明时的默认值是0值,而是有工程上的意义。试想,一个代表星期的枚举类Week,我们会... 阅读全文
posted @ 2015-08-12 17:39 JesseLZJ 阅读(527) 评论(0) 推荐(0) 编辑
摘要: 建议6: 区别readonly和const的使用方法很多初学者分不清readonly和const的使用场合。在我看来,要使用const的理由只有一个,那就是效率。但是,在大部分应用情况下, “效率”并没有那么高的地位,所以我更愿意采用readonly,因为readonly赋予代码更多的灵活性。con... 阅读全文
posted @ 2015-08-12 17:33 JesseLZJ 阅读(673) 评论(0) 推荐(0) 编辑
摘要: 建议5: 使用int?来确保值类型也可以为null基元类型为什么需要为null?考虑两个场景:1)数据库中一个int字段可以被设置为null。在C#中,值被取出来后,为了将它赋值给int类型,不得不首先判断一下它是否为null。如果将null直接赋值给int类型,会引发异常。2)在一个分布式系统中,... 阅读全文
posted @ 2015-08-12 17:00 JesseLZJ 阅读(642) 评论(0) 推荐(0) 编辑
摘要: 建议4: TryParse比Parse好如果注意观察除string外的所有基元类型,会发现它们都有两个将字符串转型为本身的方法:Parse和TryParse。以类型double为例,这两个方法最简单的原型为:public static double Parse(string s) public s... 阅读全文
posted @ 2015-08-12 16:51 JesseLZJ 阅读(807) 评论(2) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 下一页