第一章 .NET之道
本章为本书其余部分建立一个概念性的框架,由.net之前的各种技术的局限性和复杂性开始,然后综述了.net和c#是如何简化这一状况的. .NET从根本上来说就是一个运行库执行引擎(mscoree.dll)和基类库(mscorilib.dll等).
1.1 .NET之前的世界
1.1.1 c/Win32程序员的生活:使用原始的API构造应用程序是一项非常复杂的工作,c作为一个简练的语言,不得不面对手动内存管理,指针运算等等。而且c不具备对象开发的优点。难以想象....这些前辈们真是太强了,我们真是太幸福了,一切都是对象,呵呵。
1.1.2 c++/MFC程序员的生活:c++虽然相对c加入了面向对象的特性,但是仍然需要手动管理内存,指针运算等等,头也很大啊。虽然MFC包装了很多底层的操作,不过用C++搞开发仍然很复杂。
1.1.3 Visual Basic 6.0程序员的生活:相对上面两类兄弟,VB6的兄弟日子好过多了,因为VB6通过提供一些集成代码向导,内置数据类型,类和VB专用函数把原始Win32 API的复杂性隐藏了起来。不过VB6并不是完全的面向对象语言,他只是支持对象而已,和我喜欢的javascript一样啊.
1.1.4 Java/J2EE程序员的生活:Java是一门非常强大的语言,不只是他的平台无关性,而且现在搞java的兄弟找工作也很容易啊,haha。但是java也有一个很大的不足,就是他不支持与其他语言的交互性,因为这有悖java的宗旨:用唯一语言搞定一切。不得不说:发明java这哥们也太自大了点.....
1.1.5 COM开发人员的生活:COM是微软的前一个应用程序开发框架,克服了语言无关性等前些框架的缺点.但是他的语言无关性是有限制的,不支持继承...。他还有一个优点就是位置透明性. COM是很成功的,但还是太复杂了.
1.2 .NET解决方案
-> 对已有代码具有完全的互操作性.
-> 完全的语言集成.
-> 所有支持.net的语言共享的公共运行时引擎.
-> 全面的基类库.
-> 不关注COM底层操作.
-> 真正简化的部署模型.
1.3 .NET平台构造块
.Net有三个关键实体:CLR,CTS,CLS。从程序员的角度看,.NET可以理解为一个运行库环境和一全面的基类库。
1.3.1 基类库的作用:封装了各种基本类型,还支持在实际应用中的一些服务。
1.3.2 C#的优点:
-> 不需要指针.
-> 垃圾收集器自动管理内存.
-> 类 接口 枚举 结构 委托都有正式的语法结构.
-> 可以重载运算符为自定义类型.
-> 支持特性的编程.
-> 支持泛型.
-> 支持匿名方法.
-> 简化委托/事件模型,包括协变 逆变以及方法组的转换.
-> 支持partial关键字创建类型.
-> 支持强类型的查询.
-> 支持匿名类型.
-> 支持匿名方法.
-> 支持扩展方法.
-> 包含了Lambda运算符(=>).
-> 新的对象初始化语法.
1.4 .NET程序集概览
这里提醒大家,不管你选用何种选编程,他们最后都会编译成CIL。.Net程序集不同于COM(虽然他们的扩展名一样),但是.Net程序集里面包含CIL和元数据.
.Net程序集可以是单文件程序集,也可以是多文件程序集,在多文件程序集里面有很多的模块.
1.4.1 CIL的作用:CIL是一种和平台无关的语言.
->CIL可以实现语言集成性,因为任何.Net的编译器最后都生成CIL.
->CIL可以用JIT编译成平台相关性的代码,而且实现了平台优化.
1.4.2 .NET元数据的作用:.Net程序集除了包括CIL外还包含了元数据.元数据描述了一个二进制文件里面的定义的类型及其成员,让大家兴奋的是元数据的生产是编译器的工作,大家只需要用就可以了...罗嗦一句,元数据太重要了,开发工具里面的智能感知和各种对象浏览器,调试工具以及C#编译器都在使用元数据.他是.Net许多技术的支柱,包括WCF,XML Web服务/远程处理层,反射,晚期绑定和对象序列化.
1.4.3 程序集清单的作用:他其实就是描述程序集自身的元数据.
1.5 CTS
在.Net里面,类型是一个一般性的术语,他指的是集合{类,接口,结构,枚举,委托}里的任意一个成员.CTS是一个正式的规范,他规定了类型必须如何才能CLR承载.
CTS类型成员:类型成员是集合{构造函数,终结器,静态构造函数,嵌套类型,运算符,方法,属性,索引器,字段,只读字段,常量,事件}中的元素之一.