.net体系结构——C#高级编程第一章
C#语言不能孤立的使用,而必须和.Net Framework一起考虑。C#编译器专门用于.Net,这表示用C#编写的所有代码总是在.Net Framework中运行。对于C#语言来说,C#的结构和方法论反映了.Net的基础方法论,在许多情况下C#的特定语言功能取决于.Net的功能,或依赖于.Net基类。
一、C#与.Net的关系
C#是一种编程语言,是专门为与Microsoft的.Net Framework一起使用而设计的(.Net Framework是一个功能非常丰富的平台,可开发、部署和执行分布式应用程序),C#是一种基于现代面向对象设计方法的语言。
C#本身就是一种语言,尽管它是用于生成面向.Net环境的代码,但它本身不是.Net的一部分。.Net支持的一些特性C#不支持,C#支持的另一些特性.Net也不支持(如运算符重载)!但是C#语言和.Net Framework一起使用,所以如果要使用C#高效的开发应用程序,就必须理解.Net Framework。
二、公共语言运行库
.Net Framework的核心是其运行库执行环境,称为公共语言运行库(CLR)或.Net运行库,在CLR控制下运行的代码称为托管代码(managed code)。但是在CLR执行编好的源代码之前需要编译它们,.Net中编译分为2个阶段:
(1)、把源代码编译为Microsoft中间语言(IL/MSIL)。
(2)、CLR把IL编译为平台专用的代码。
Microsoft中间语言和Java字节码共享一种理念。对于代码,这种通用语法有很重要的优点:平台无关性、提高性能和语言互操作性。
三、中间语言中间语言IL的特征有:
1、面向对象和使用接口;
2、不同的值类型(value type)和引用类型(reference type),值类型变量直接存储其数据,引用类型变量仅存储地址,对应的数据可以在该地址中找到;
3、强数据类型化,所有变量都清晰的标记为属于某个特定的数据类型,中间语言不允许对模糊的数据类型执行任何操作。
尽管强迫实现类型的安全性似乎会降低性能,但许多情况下,我们从.Net提供的、依赖于类型安全的服务中获得更多好处,如:语言互操作性;垃圾回收;安全性;应用程序域。
4、通过异常处理错误,try{}catch{}finally{};
5、特性(attribute)的使用,特性最初是为了在程序中提供与某些项相关的额外信息,以便编译器使用;.Net支持特性,在.Net中,对特性的革新是可以在源代码中定义自己的自定义特性,这些用户定义的特性将与对应数据类型或方法的元数据放在一起,这对于文档记录十分有用,它们也可以和反射技术一起使用,以根据特性执行编程任务。特性也支持语言无关性,即特性可以在一种语言的源代码中定义,而被另一种语言编写的代码读取。
四、程序集
1.程序集(assembly)是包含编译好的、面向.Net Framework的代码逻辑单元,程序集是完全自描述的逻辑单元,而非物理单元,可以存储在多个文件中(动态程序集存储在内存中)。
2.程序集的一个特性是它们包含的元数据描述了对应代码中定义的类型和方法。程序集也包含描述程序集本身的元数据,这些元数据包含在一个称为“清单(manifest)”的区域中,可以检查程序集的版本和完整性。
3.程序集有两种类型:私有程序集(只能应用在某个软件上)和共享程序集(其他应用程序也可以使用的公共库,注意名称冲突和版本覆盖后不兼容问题,此时要把共享程序集放在文件系统的一个特定的子目录树中,称为全局程序集缓存GAC)。
4.因为程序集存储了元数据,包括在程序集中定义的所有类型和这些类型成员的细节可以以编程访问这些元数据,这个技术称为反射。该技术常常用于获取特性的详细信息,运行时调用类的方法,信息等。
5.Net Framework允许用双核和4核处理器,新的并行计算能力提供了分隔工作活动、并在多个处理器上运行这些活动的方式。现在可用的、新的并行编程API使得编写安全的多线程代码变得容易,但要注意竞态条件和锁。新的并行编程功能提供了一个新的Task Parallel Library和PLINQ Execution Engine。
五、.Net Framework类
.Net Framework基类是一个内容丰富的托管代码类集合,它可以完成以前通过Windows API完成的绝大多数任务。.Net Framework基类的一个主要优点是它们非常直观和易用,如启动一个线程可以调用Thread类的Start()方法,禁用Button控件设置Enabled属性为False即可。
六、名称空间
名称空间是.Net Framework避免类名冲突的一种方式,如System.Array。
七、C#创建.Net应用程序
Asp.net应用程序:web窗体,web服务器控件,xml Web服务;
Windows窗体;
WPF技术:WPF在建立应用程序时使用XAML可扩展的应用程序标记语言,XAML是用于创建窗体的XML声明,代表WPF应用程序的所有可视化部分和操作。WPF是面向声明性编程的一步,而声明性编程是编程业的趋势。声明性编程是指:不是利用编程语言,如C#,VB或JAVA,通过编程来创建对象,而是通过XML类型的编程来声明所有元素;
Windows控件;
Windows服务:System.ServiceProcess名称空间中的.Net Framework基类可以处理许多与服务相关的样本任务;
WCF技术:可以采用多种方式将数据和服务从一处移动到另一处如:ASP.NET Web服务、.Net Remoting、Enterprise Services和MSMQ等,由于每种方式都适合不同的场合,所以Microsoft把这些技术集成在一起放在.Net Framework中,即WCF。WCF允许建立好服务后,只要修改配置文件,就可以用多种方式提供该服务,WCF是一种连接各种系统的强大新方式;
Windows WF:WF有一个新的流程控制类Flowchart,还有一些新活动,如DoWhite、ForEach和ParalleForEach。
八、C#在.Net企业体系结构中的作用
C#和Asp.Net可以创建为企业提供需要的各种应用程序。
小结:本文介绍了许多基础知识,简要回顾了.Net Framework的重要方面和它与C#的关系,IL特征,C#如何用作基于.Net的几种技术应用程序的基础,后面会详细介绍相关知识。