摘要: 引言: 在C# 1.0中我们经常使用foreach来遍历一个集合中的元素,然而一个类型要能够使用foreach关键字来对其进行遍历必须实现IEnumerable或IEnumerable接口,(之所以要必须要实现IEnumerable这个接口,是因为foreach是迭代语句,要使用foreach必须要有一个迭代器才行的,然而IEnumerable接口中就有IEnumerator GetEnumerator()方法是返回迭代器的,所以实现了IEnumerable接口,就必须实现GetEnumerator()这个方法来返回迭代器,有了迭代器就自然就可以使用foreach语句了),然而在C# 1.0. 阅读全文
posted @ 2013-07-15 23:52 眉目清扬 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 引言: 在这个专题中将介绍匿名方法,匿名方法看名字也能明白,当然就是没有名字的方法了(现实生活中也有很多这样的匿名过程,如匿名投票,匿名举报等等,相信微软在命名方面肯定是根据了生活中例子的),然而匿名方法的理解却不是仅仅是这一句话(这句话指的是没有名字的方法),它还有很多内容,下面就具体介绍下匿名方法有哪些内容一、匿名方法 之前一直认为匿名方法是在C# 3.0中提出的,之前之所以这么认为主要是因为知道C# 3.0中提出了匿名类型,所以看到匿名方法就很理所当然的认为也是在C# 3.0中提出来,然而经过系统的学习C#特性后才发现匿名方法在C# 2.0 的时候就已经提出来了,从特性的提出发展中可.. 阅读全文
posted @ 2013-07-15 23:16 眉目清扬 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 引言: C# 2.0 中还引入了可空类型,可空类型也是值类型,只是可空类型是包括null的值类型的,下面就介绍下C#2.0中对可空类型的支持具体有哪些内容(最近一直都在思考如何来分享这篇文章的,因为刚开始觉得可空类型使用过程中比较简单,觉得没有讲的必要,但是考虑到这个系列的完整性,决定还是唠叨下吧,希望对一些不熟悉的人有帮助)。一、为什么会有可空类型 如果朋友们看了我之前的分享,对于这一部分都不会陌生,因为我一般介绍C#特性经常会以这样的方式开头的, 因为每个特性都是有它出现的原因的(有一句佛语这是这么讲的:万事皆有因,有因必有果),首先来说说这个因的(结果当然是新增加了可空类型这个新特性.. 阅读全文
posted @ 2013-07-08 00:32 眉目清扬 阅读(189) 评论(0) 推荐(1) 编辑
摘要: 引言: 在C# 2.0中泛型并不支持可变性的(可变性指的就是协变性和逆变性),我们知道在面向对象的继承中就具有可变性,当方法声明返回类型为Stream,我们可以在实现中返回一个FileStream的类型(里氏代换的赶脚呢),此时就存在一个隐式的转化——从FileStream类型(子类引用)——>Stream类型(父类引用),并且引用类型的数组也存在这种从子类引用——>父类引用的转化,例如string[] 可以转化为object[](即这样的代码是可以通过编译的:string[] strs =new string[3]; object[] objs =strs;),此时我们肯定会想是 阅读全文
posted @ 2013-07-03 00:48 眉目清扬 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 还是老样子,原文是转载的,不过加入了自己的思考和总结吧。引言: 本专题主要是承接上一个专题要继续介绍泛型的其他内容,这里就不多说了,就直接进入本专题的内容的。一、类型推断 在我们写泛型代码的时候经常有大量的""符号,这样有时候代码一多,也难免会让开发者在阅读代码过程中会觉得有点晕的,此时我们觉得晕的时候肯定就会这样想:是不是能够省掉一些""符号的呢?你有这种需求了, 当然微软这位好人肯定也会帮你解决问题的,这样就有了我们这部分的内容——类型推断(其实我觉得好像也就是语法糖吧,这个观点还有待确认!),意味着编译器会在调用一个泛型方法时自动判断要使用的类型, 阅读全文
posted @ 2013-06-29 00:14 眉目清扬 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 引言: 在上一个专题中介绍了C#2.0 中引入泛型的原因以及有了泛型后所带来的好处,然而上一专题相当于是介绍了泛型的一些基本知识的,对于泛型的性能为什么会比非泛型的性能高却没有给出理由,所以在这个专题就中将会介绍原因和一些关于泛型的其他知识。一、泛型类型和类型参数 泛型类型和其他int, string一样都是一种类型,泛型类型有两种表现形式的:泛型类型(包括类、接口、委托和结构,但是没有泛型枚举的)和泛型方法。那什么样的类、接口、委托和方法才称作泛型类型的呢 ?我的理解是类、接口、委托、结构或方法中有类型参数就是泛型类型,这样就有类型参数的概念的。 类型参数——是一个真实类型的一个占位符(.. 阅读全文
posted @ 2013-06-26 23:47 眉目清扬 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 引言:前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解,那就让我们一起进入本专题的学习的。一、泛型的是什么 泛型的英文解释为generic,当然我们查询这个单词时,更多的解释是通用的意思,然而有些人会认为明明是通用类型,怎么成泛型了的,其实这两者并不冲突的,泛型本来代表的就是通用类型,只是微软可能有一个比较官方的此来形容自己引入的特性而已,既然泛型是通用的, 那么泛型类型就是通用类型的,即泛型就是一个模子。在生活中,我们经常会看到模子,像我们平常生活. 阅读全文
posted @ 2013-06-24 22:33 眉目清扬 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 引言:当我们在点击窗口中的Button控件VS会帮我们自动生成一些代码,我们只需要在Click方法中写一些自己的代码就可以实现触发Click事件后我们Click方法中代码就会执行,然而我一直有一个疑问的——既然上一专题中说事件是一个多播委托,然而自动生成的代码中只有事件的实例化,却没有看到事件的调用,那既然没有事件调用的代码,那封装的Click为什么会执行呢?一、点击按钮时触发Click事件背后发送的事情在引言中提出了我的提问的, 我相信有些朋友可能也会有这样的疑问的,然后事件肯定是调用了的, 只是不是我们代码中调用,而是Butoon控件的内部代码里面调用了事件,而导致委托封装的Click方法 阅读全文
posted @ 2013-06-24 22:10 眉目清扬 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 引言:前面几个专题对委托进行了详细的介绍的,然后我们在编写代码过程中经常会听到“事件”这个概念的,尤其是写UI的时候,当我们点击一个按钮后VS就会自动帮我们生成一些后台的代码,然后我们就只需要在Click方法里面写代码就可以,所以可能有些刚接触C#的朋友就觉得这样很理所当然的,也没有去思考这是为什么的,为什么点击下事件就会触发我们在Click方法里面写的代码呢?事件到底扮演个什么样的角色呢?为了解除大家的这些疑惑,下面就详细介绍了事件,让一些初学者深入理解C#中的事件的概念。一、为什么C#中会有事件的? 前面专题中介绍了我理解的为什么需要委托的,所以这里我来分享下我理解的为什么C#中要引入事. 阅读全文
posted @ 2013-06-20 23:34 眉目清扬 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 话不多说,正文开始。引言:上一专题介绍了下编译器是如何来翻译委托的,从中间语言的角度去看委托,希望可以帮助大家进一步的理解委托,然而之前的介绍都是委托只是封装一个方法,那委托能不能封装多个方法呢?因为生活中经常会听到,我代表大家的意见等这样的说话,既然委托也是一个代表,那他如果只能代表一个人,那他的魅力就不是很大了吧,所以我们就会委托能不能代表多个方法的? 答案是可以的,这就是本专题要讲的内容——委托链,委托链也是一个委托,只是因为它是把多个委托链在一起,所以我们就以委托链来这么称呼它的。一、到底什么是委托链我们平常实例化委托对象时都是绑定一个方法的, 前一个专题介绍的委托也是包装了一个方法的 阅读全文
posted @ 2013-06-19 23:39 眉目清扬 阅读(305) 评论(0) 推荐(0) 编辑