随笔分类 -  C#

摘要:从2.0起我们一直就在谈论泛型,那么什么是泛型,泛型有什么好处,与泛型相关的概念又该怎么使用,比如泛型方法,泛型委托。这一篇我会全面的介绍泛型。 那么首先我们必须搞清楚什么是泛型,泛型其实也是一种类型,跟我们使用的int,string一样都是.net的类型。泛型其实就是一个模板类型,万能类型。它允许我们在设计类的时候使用一个类型空白。预留一个类型。等到我们使用这个类的时候,我们可以使用特定的类型来替换掉我们预留的这个类型。这就是泛型。 那么这样使用的好处有什么呢? 1,类型安全性 2,性能提高 3,代码重用 4,扩展性 为什么会有这几个好处,我们来解析一下。 在我们讨论泛型... 阅读全文
posted @ 2011-11-24 22:21 刘中栋 阅读(8842) 评论(5) 推荐(7)
摘要:在C#中,我们有各种预定义的类型可以使用,比如int,int实际上是System.Int32的一个实例。它的取值有一个范围。如果我们的int从某个地方接收到一个null,比如数据库,或者任何其他地方。那么赋值肯定会失败。而且会产生编译错误或者运行时错误。当然我们可以处理这样的异常或者做一个些防范。但是我们有一种更好的选择,就是让我们的基本数据类型除了可以取正常范围的值之外还能为null,这样就不会产生异常,我们只需要在要使用这个值的时候检测一下值是否非空就可以使用了。那么这个类型就是System.Nullable<T>.简写为T?.T为我们要使用的类型,但是不能为引用类型,事实上也 阅读全文
posted @ 2011-11-13 03:35 刘中栋 阅读(2949) 评论(0) 推荐(0)
摘要:关于C#的基本运算符其实不需要介绍太多,但是这里还是有几个值得我们注意一下的运算符,多的先不说,先贴上C#中所有的运算符 其中的sizeof和寻址运算符我们不需要了解但多,因为CLR帮我们做了,.netframerwork是类型安全的。 下面介绍几个我们需要注意的运算符。 增量运算符和减量运算符 ++,-- 我们来看一个例子,X++和++X的区别 X++和++X可以用做表达式,那么什么是表达式,表达式就是可以计算且结果为单个值、对象、方法或命名空间的代码片段,也可以用作代码块。当用作代码块的时候,就是他们单独占一行的时候,X++跟++X的效果是一样的,都是X... 阅读全文
posted @ 2011-11-10 16:25 刘中栋 阅读(10578) 评论(1) 推荐(2)
摘要:我们可以使用foreach迭代数组,集合。那么为什么数组和集合可以使用foreach迭代而别的类型却不行呢?foreach的内部机制又是什么,这里我来说一下枚举器。 很多教材上说,使用foreach迭代必须满足什么条件,很多人就是一句话,实现IEumerable接口。其实不是完全正确。实现IEumerable接口只是第一步。第二步是要实现GetEumerator()方法,这个方法需要返回IEumerator接口。其实真正起作用的是GetEumerator()和IEumerator接口。原因是,C#中的foreach最后在IL代码中不会编译为foreach,而是会把foreach转化为IE... 阅读全文
posted @ 2011-11-08 19:35 刘中栋 阅读(265) 评论(0) 推荐(0)
摘要:我们可以使用数组来处理一组相同的类型,我们可以根据索引来获取每一个元素。那么既然是这样,我们为什么还要使用索引器呢?我们觉得有以下几点。 1,如果我们的类的意图本身就是想表示现实中的一组事物。本身就是一个群集的概念,那么我们就可以封装数组或集合成为索引器,让我们的类看上去像一个整体概念。这样有助与我们理解类的意图。使我们的类专注于表现群集的概念。这会使我们的类有数组的表现形式。更加形象化。还使其他开发人员能够更加直观地理解类及其用途。 2,使用数组有时候要依托于类里的数组。而索引器却是积极的表现类的意图,可以直接使用类索引 3,我们可以很轻易的使用别的类型来索引我们自己的类,当然数组... 阅读全文
posted @ 2011-11-08 03:31 刘中栋 阅读(289) 评论(0) 推荐(0)
摘要:在.netframerwork中数组是一种数据结构,它包含若干同一类型的元素。就好像我们可以把多个相同类型的若干元素放在一个容器中供我们使用。数组就好像装鸡蛋的格子,里面的元素就好像是鸡蛋。数值数组的默认值为0,引用元素的默认值为null。数组的大小是不可变的,一旦定义了大小就不可变,除非我们克隆出另外一个数组。声明一个数组是很简单的,声明数组,只需要先定义数组中元素的类型,然后后面加一个方括号 int[] arr; 初始化数组也是很简单的,可以有以下的几种方式。 arr = new int[4]; 由于数组是引用类型,所以使用new关键字初始化,然后指定数组的大小。也可以把他们写... 阅读全文
posted @ 2011-11-07 22:22 刘中栋 阅读(389) 评论(0) 推荐(0)
摘要:这篇谈谈扩展方法,顾名思义,扩展即对某一个事物进行增加,或者增加一些功能。那扩展方法呢?比如我们现在有一个类A,但是这个类就标记成了sealed,我们不能继承这个类,又或者我们现在手上有一个dll,可以是买来的,可以是任何途径你得到的,但是你发现这个dll中有一个些类的功能并不是你想要的,或者没有你想要的,但是你却加不了任何方法。这个时候就可以用扩展方法。扩展方法即扩展我们想要扩展功能但却不能继承,不能修改源代码的类。 首先,扩展framerwork的string类,因为string类是sealed类 首先是扩展类namespace ExtensionMethod{ public sta... 阅读全文
posted @ 2011-10-17 04:50 刘中栋 阅读(266) 评论(1) 推荐(0)