前言和第一章.NET的体系结构
前言
COM:组件对象模型(Component Object Model COM)源自对象链接和嵌入(Object Linking and Embedding )OLE。
DCOM:(Distributed COM)分布式组件对象模型
COM:几乎是左右组件通信方式的基础,实现了事物处理,消息传输服务,和对象池。
Windows上的软件的通信几乎都是用COM实现。
.NET能够提供现有COM组件包装器(wrapper),以便.NET组件之间的通信。
.NET的优点
1. 面向对象编程
2. 优秀的设计
3. 语言无关性
4. 动态Web页面更好的支持
5. 高效的数据访问
6. 代码共享
7. 增强的安全性
8. 对安装没有任何影响
9. web服务的支持
C#的优点
1.完全支持类和面向对象编程,包括接口和实现继承、虚函数和运算符重载
2.一致且定义完善的基本类型集
3.对自动生成xml档的内置支持
4.自动清理动态分配的内存
5.可以用用户定义的属性来标记类或方法。这可以用于文档,
6.可以完全访问.net基类库,并易于访问Windows API
7.可以使用指针和直接访问内存,但c#言可以在没有它们的条件下访问内存
8.改变编译器选项,可以把程序编译为可执行文件或..net组件库,该组件库可以用与Am、α
9.控件COM组件)相同的方式由其他代码调用。
10.C#可以用于编写asp.net动态Web页面和XML Web服务。
第一章.NET的体系结构
1.1 C#与.NET的关系
l C#是一种开发语言
l .net是一种开发平台
1.2 公共语言运行库
.NET FrameWork核心是其运行库的执行环境称为公共语言运行库(CRL)或者.NET运行库 ,通常把在CRL控制下的代码称为托管代码
CRL在执行编写好的源代码之前需要编译他们
在.NET中编译分为两个阶段:
1.把源代码翻译中微软的中间语言(IL)
2.CRL把微软中间语言(IL)翻译成平台语言
微软中间语言实现:平台无关性,提高性能,语言的互操作性。
平台无关性
.NET的平台无关性参考:(http://www.go-mono.com)
提高性能
IL和java字节码比较IL比java字节码的作用还要大IL总是即时编译(JIT编译)
JIT编译并不是一次把应用程序编译完(这样会有很长的启用时间)而是之编译他调用的那部分代码(这是其名称由来)代码编译以后得到一个本地的应用程序存储起来知道退出该应用程序为止。这样下次运行时就不需要重新编译了。
JIT编译器确切的知道程序运行在什么样的处理器上,可以利用该处理器提供的任何特性或者特定的机器代码指令来优化最后的可执行代码。
语言互操作性
任何一种语言编译为中间语言,编译为中间语言的代码可以从其它语言编译过来的代码进行交互操作。
1.3中间语言
面向.net的所有语言在逻辑上都需要支持IL的主要特性。
中间语言的特性:
面向对象使用接口
值类型和应用类型之间的显著差异
强数据类型化
使用异常来处理错误
使用特性
面向对象使用接口的支持
类的单一继承性
提供一个契约,实现给定接口的类必须提供该接口制定的方法和属性的实现方式。
重要的是组件仅能通过COM运行库与其他组件同行使用不同语言的组件无法通过COM直接彼此通信或者创建彼此实例——系统总将COM作为中间件。
COM体系结构还不允许利用继承实现,即,丧失面向对象编程的许多优势。
1) 用一种语言编写的类应能继承另一种语言编写的类。
2) 一个类应该能包含另一个类的实例而不管两个类是用什么语言编写的。
3) 一个对象应能直接调用其它语言编写的另一个对象的方法。
4) 对象(或者对象的引用应能在方法之间传递)
5) 在不同的语言之间调用方法时,应能在调试机中交替调试这些方法的调用,即,调试不同语言编写的源代码。
不同的值类型和应用类型
值类型:变量直接存储其数据。
应用类型:仅存储地址,对应的数据可以在改地址中找到。
强化数据类型
l 语言的互操作性。
l 垃圾收集
l 安全性
l 应用程序域
通用类型系统(CTS)
CTS不仅制定了基本数据类型,还定义了一个 内容丰富的类型层次结构
C#中,编译器识别的每个预定义类型都映射为一个IL内置类型。
公共语言规范(CLS)
公共语言规范(Common Language Specification ,CLS)和通用类型系统一起确保语言的互操作性。
公共语言规范(CLS)的两种工作方式
l 各个编译器的功能不必强大到支持.net的所有功能,这将鼓励人们为其它面向.net的编程语言开发编译器。
l 如果限制类只能使用CLS兼容特性,就要保证用其它兼容语言编写的代码可以使用这个类。
垃圾回收器
垃圾回收器用来在.net中进行内存管理
Windows平台己经使用了两种技术来释放进程向系统动态请求的内存:
l 完全以手工方式使应用程序代码完成这些工作。
l 让对象维护引用计数。
安全性
.net提供了基于代码的安全性
Windows提供了基于用户角色的安全性
应用程序域
应用程序域是.NET中的一个重要技术改进,它用于减少运行应用程序的系统开销,这些应用程序需要与其他程序分离开来,但仍需要彼此通信
应用程序域(application domain)是分离组件的一种方式,它不会导致因在进程之间传送数据而产
生的性能问题。其方法是把任何一个进程分解到多个应用程序域中。每个应用程序域大致对应一个
应用程序,执行的每个线程都运行在一个具体的应用程序域中,如图⒈3所示
通过异常处理错误
异常结构确保在发生错误情况时,执行进程立即跳到最有针对性的异常处理例程上,来处理错
误情况。
特性的使用
是为了在程序中提供与某些项相关的额外信息,以供编译器使用。
程序集
程序集是包含编译好的,面向.NET Framework的代码逻辑单元。
程序集完全是自描述的是一个逻辑单元而非物理单元,可以存储在多个文件中(动态程序集的确存储在内存中而不是存储在文件中)如果一个程序存储在多个文件中,其中就会有一个包含入口点的主文件,该文件描述程序集中的其他文件。
可执行代码和库代码使用相同的程序集结构。唯一的区别是可执行的程序集包含一个主程序的入口点,而库程序不包含。
程序集有两种类型:私有程序集和共享数据集
反射
因为程序集中包含了元数据,包含在程序集中定义的所有类型和这些类型的成员细节,所以可以变成访问这些元数据这个技术称为反射。(常用于获取特性的详细信息,也可以吧反射用于其它目的)
并行编程:应该考虑竞态条件和锁。
名称空间
名称空间是.net中避免类名冲突的一种方式。
Asp.net的功能:
Asp.net页面是结构化的,即每个页面都继承了.NET类 System.Web.UI.Page的类
XML服务
公司选择XML服务的原因:
XML服务依赖于http,而XMLWeb服务可以把现有的网络Http用作传输信息的媒介
XML Web服务使用XML 该数据格式是自描述的,非专用的独立于平台。
WPF
要运行WPF应用程序,需要在客户机上安装.NET FramewOrk3,0、3,5或4。
小结