C#高级编程读书笔记 - 第一章.Net体系结构

来源:互联网 发布:供电公司内网网络大学 编辑:程序博客网 时间:2024/05/17 02:32
本章是对.Net体系结构的概述,增强我们对.Net框架的系统认识,概念很多,但是我觉得不必拘泥于这些概念的字面定义,应该在实际项目中体会这些概念的意义,从知道自己不知道到不知道自己知道再到知道自己知道,这样便豁然开朗,更上一层楼。废话不多说,下面总结一些我自己觉得比较重要的地方:


1.CTS,CLS和CLR
学习.Net开发时会不可避免的碰到这几个概念,之所以把他们放在一起讨论,并不是说他们是并列的几个概念,而是因为.Net的核心是CLR而CLR的核心特性源于CTS和CLS。下面我们看看三者的关系:
1)CTS通用类型系统(Common Type System)


CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展。任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供了语言之间的继承性。例如,用户能够在VB.NET中派生一个由C#编写的类。我们可以将CTS 看成是所有.NET 语言的superset (union),而符合CTS 的各种不同的语言,其实都只是CTS 的subset (intersection)。这些语言所写出来的程序,如果想要有最佳的相容性,以便互相调用(invoke) 或继承,这些语言之间就必需取得一个共同的subset,有共同遵守的规范,这就是CLS 。


2)CLS通用语言规范(Common Language Specification)


很显然,编程语言的区别不仅仅在于类型。例如,一些语言支持多继承性,一些语言支持无符号数据类型,一些语言支持运算符重载。用户应认识到这一点,因此.NET通过定义公共语言规范(CLS:Common Language Specification),限制了由这些不同引发的互操作性问题。CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。认识到这点很重要,这里讨论的特征问题已不仅仅是语言间的简单语法区别。例如,CLS并不去关心一种语言用什么关键字实现继承,只是关心该语言如何支持继承。CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如VB.NET)设计的.NET组件实现互操作。


3)CLR公共语言运行库(Common Language Runtime)


简单地说,CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。作为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不用对象的垃圾回收和安全检查。在CLR监控之下运行的代码,称为托管代码(managed code)。


通俗的说,一方面CLR其实是一个类似java虚拟机的存在:java按照规则编译成java字节码,字节码由特定的虚拟机解释执行,从而产生了java平台无关性;而.Net上层语言(比如C#.VB等)编译成Microsoft中间语言IL,然后由CLR讲IL编程为平台专用代码,从而产生了.Net的平台无关性。另一方面.Net做得更好的是java字节码是解释执行的而IL总是即时编译的,故效率要高。而且IL还支持语言互操作,即支持多种语言及其相互调用,而这就是由CLS所带来的。也就是说只要是符合CLS规范的语言,比如C#,就能直接编译成IL在CLR上顺利运行。但并不是所有的语言都像C#一样是为.Net量身定制的,所以.Net滴很多语言进行了一些处理,使其支持CTS,.Net的对这些语言的处理方式主要有:修改语言,扩充兼容以及编译器设计,从而诞生了VB.Net、C++.Net等。而CTS正是CLS规范中的类型系统,打个简单的比方:C#有int类型,而VB有Integer类型,但在.Net中其实他们都对应的System.Int32这个CTS数据类型,这样就为语言间的互相操作奠定了类型基础。


2.WCF、WPF、Silverlight


我们知道.Net在window平台上可以创建不同类型的应用程序,命令行,window窗体即桌面应用程序,window控件/库,window服务,asp的web应用等,几乎无所谓不能。而且随着时间发展.Net家族成员越来越丰富,wcf,wpf,silverlight等新名次层出不穷,有时候容易把人弄晕,这里来理一理他们之间的关系。


WPF是Windows Presentation Foundation,微软新发布的Vista操作系统的三大核心开发库之一,其主要负责的是图形显示,所以叫Presentation(呈现)。WPF可以编写Web程序或者桌面应用程序,可以直接编译为独立运行的.Exe文件。WPF运行时必须安装.net Framework 3.0。


SilverLight可以看作是WPF的一个简化版本,或者一个轻量版本。 SilverLight是基于浏览器插件的,在浏览器中运行,服务器端不需要部署任何环境,客户端只需要安装Runtime浏览器插件,无须安装.net Framework 3.0。所以,SilverLight的运行环境不受操作系统和浏览器的种类限制(更准确的说,是受到较少的限制)。但是比WPF削减了很多功能。 比如,WPF支持直接在XAML中绑定触发来触发动画,而SilverLight就只能通过托管代码或者Javascript来进行。 另外,WPF直接支持3D效果和3D镜头变换,但是SilverLight就不支持这个了 


WCF为Windows Communication Foundation,是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。