第1章 .NET结构
C#语言不能孤立对待,而必须和.NET Framework一起考虑
C#编译器专门用于.NET,这表示在C#中编写的所有代码总是在.NET Framework中运行
C#的结构和方法论反映了.NET的基础性方法论
在许多情况下,C#的特点语言特性取决于.NET的特性,或依赖于基类
1.1 .NET概述
理解.NET Framework最简单的方式是把它看作执行代码的环境
.NET承担了双重角色:管理代码的执行和为代码提供服务
.NET运行时:也称为公共语言运行时(Common Language Runtime)或CLR,它实际管理代码
受管制的代码:在.NET环境中运行的任何代码都称为受管制的代码(unmanaged code),.NET外部的其他代码也运行在Windows上
这些代码称为未受管制的代码(unmanaged code)
中间语言(IL):在.NET运行时加载和运行代码时,这种语言确定代码的位置
公共类型系统(CTS):为了实现语言的互操作性,必须有一组各种语言都认可的基本数据类型,这样才能对所有语言进行标准化
处理,CTS就提供了这个功能,还提供了定义定制类的规则
.NET基类:这是一个扩展的类库,它包含预先写好的代码,执行Windows上的各种任务
装配件:存储编译好的受管制的代码的单元
装配件高速缓冲存储器:存储共享装配件的磁盘区域
公共语言规范(CLS):确保代码可以在任何语言中访问的最小标准集合
反射:因为装配件完全自我描述,理论上可以编程访问装配件元数据,这种技术称为反射
Just-in-Time(JIT)编译:表示执行编译过程的最后阶段,即从中间语言转换为内部机器代码
装配件清单:存储包含元数据的装配件的区域
应用域:CLR允许不同代码在同一个过程空间中运行的方式
无用存储单元收集:CLR清理不再需要的内存的方式,应用程序不必负责内存的释放
1.2 编译和运行程序
在程序运行前必须编译,与以前的可执行文件和DLL文件不同,编译好的代码不包含汇编语言指令,而是包含Microsoft Interme
diate Language(MSIL或IL)指令,中间语言是一种相当低级的语言,可以快速转换为内部机器码(JIT编译)
过去完整的软件包有一个可执行程序,其中包含主程序的启动入口点,多个库或COM组建,而.NET中程序包含许多装配件,其中
一个装配件被指定为一个可执行程序,包含主程序的启动入口点,其他装配件则指定为库
运行程序时,.NET运行时会加载第一个装配件
代码中只有实际要使用的部分才会被编译,这个过程称为just-in-time编译
运行受管制的代码的优点:安全/垃圾收集避免内存泄漏/应用域使不同的程序在同一过程彼此独立又能彼此通信
1.3 中间语言
Java源代码被编译为Java字节代码,然后解释执行,而中间语言代码被编译为内部机器码则不会损失一些相关性能
中间语言的目的不仅仅是获得平台的独立性,而且要获得面向对象环境中的语言独立性
由于对语言独立性和交互操作性的需求,所以中间语言要比Java字节代码复杂得多,类和继承性是在中间语言中定义的
对中间语言的值类型,变量直接保存其数据,而对于引用类型,变量仅保存地址,对应的数据可以在该地址中找到
引用类型的实例总是存储在一个名为堆的内存区域中,值类型一般存储在堆栈中,但如果值类型在引用类型中声明为字段,它们
就内联存储在堆中
中间语言的一个重要方面是它建立在非常强的类型化功能上,所有的变量都清晰地标记为属于某个特定数据类型
中间语言的主要特性总结:
1,具有类在单一继承实现的面向对象编程
2,接口
3,值和引用类型
4,通过异常来处理错误
5,非常强大的类型系统
1.4 语言的互操作性
COM是一个二进制标准,允许组件示例其他组件,调用它们的方法或属性,而无需考虑编写相关组件的语言
语言互操作性的真正含义是用一种语言编写的类应能直接与用另一种语言编写的类通信
公共类型规范的含义是中间语言有一组设计合理且内容丰富的预定义数据类型集
对于每种值类型,都有一个对应的引用类型来表示该类型的封箱(boxing)堆版本
公共语言规范(CLS)和公共类型系统(CTS)一起确保语言的互操作性
1.5 .NET基类库
.NET基类库是Microsoft已经编写好的一个内容丰富的受管制的代码类集合,它可以完成以前要通过Windows API来完成的绝大
多数任务
.NET基类包括:
1,IL提供的核心功能,例如,公共类型系统中的基本数据类型
2,Windows GUI支持,控件等
3,Web窗体(ASP.NET)
4,数据访问(ADO.NET)
5,目录访问
6,文件系统和注册表访问
7,连网和Web浏览
8,.NET属性和反射
9,访问Windows操作系统、环境变量等各个方面
10,访问不同语言的源代码和编译器
11,COM互操作性
12,制图技术(GDI+)
大部分.NET基类实际上都是用C#编写的
1.6 .Net Framework的组件
装配件是包含编译好的、面向.NET的代码的逻辑单元
可执行代码和库代码使用相同的装配件结构,唯一的区别是可执行的装配件包含一个主程序入口点,而库装配件则不包含
名称空间是.NET避免类名冲突的一种方式
应用域是分离组件的一种方式,它不会导致因在过程之间传送数据而产生性能问题
JIT编译器是.NET Framework的一个主要组成部分,也是Microsoft致力于确保受管制的代码比不受管制的代码的性能更高的
重要方面
Java字节代码是解释性的,而IL是编译性的
除了运行时的服务外,.NET还可以使用许多工具帮助开发.NET应用程序,包括:
1,Visual Studio.NET集成开发环境
2,C#、VB.NET和C++命令行编译器
3,ILDASM检测装配件工具
无用存储单元收集器是.NET的内存管理方式,特别是它可以恢复正在运行中的应用程序需要的内存
让应用程序代码负责释放内存是低级、高性能的语言使用的技术,例如C++
.NET可以根据异常使用相同的机制处理错误情况,这与Java和C++是一样的
.NET提供的安全机制是基于代码的安全性,可以在运行代码前指定代码需要什么安全权限
属性最初是为了在程序中提供与某些项目相关的外部信息,以便编译器在编译时使用
在.NET中,属性新增内容是一个机制,该机制可以在定义自己源代码的属性地方存在,这些用户定义的属性将和对于数据类型
或方法的方法数据放在一起,在文档说明书中使用它们,和反射技术一起使用,以根据属性执行编程任务
装配件存储了元数据,包括在装配件中定义的所有类型和这些类型的成员的细节,使用System.Reflection名称空间中的.NET
基类可以编程访问这些元数据
1.7 语言和技术
C#是一种新的面向对象编程语言,专门用于.NET运行时
C#编译器只能生成受管制的代码,也可以使用.NET基类
C++有许多Microsoft对Windows的特定扩展,以后还要加入更多的扩展内容,来支持.NET Framework
现有的C++源代码会继续编译为内部可执行代码,不会有修改,但它会独立于.NET运行时
J++是为了继续支持向后兼容性才保留下来的,它没有升级到.NET上
至于以前的J++代码,Microsoft提供JUMP(Java User Migration Path)工具,其口号是“跳跃到.NET”
这些工具允许Visual Studio.NET和现有的J++代码一起工作
还可以使用迁移工具,把J++代码自动转换为C#代码
Visual Basic在升级到.NET时,经历了一番脱胎换骨的变化,早期版本的Visual Basic 6并不适合于运行.NET程序
ASP页面是孤立于.NET之外的,但是.NET升级了IIS以支持ASP.NET页面,其中的代码可以直接使用VB.NET、C#或JScript.NET
编写,并编译为类,通过生成相应的HTML输出,响应Web请求
脚本语言仍在使用之中,但一般认为它们的重要性在降低,VBA仍用作Office文档和Visual Studio宏语言
可以通过COM互操作性在受管制的代码中使用ADO或OLE DB,与数据源通信,这可能要比使用ADO.NET容易一些
ADO.NET是.NET基类的一个子集,主要用于与数据源通信
.NET基类System.DirectoryServices用于替代ADSI,执行许多相同的功能,但仍可以使用旧的ADSI接口
COM+仍然是一个重要的工具,即使其特性没有在.NET中完全实现
COM组件仍可以使用----.NET组合了COM的互操作性,从而是受管制的代码可以调用COM组件,COM组件也可以调用受管制的代码
1.8 把所有的功能都组合起来
除了just-in-time编译的最后一步外,所有的基本数据类型包装都是在编译时解开而不是运行期间解开的,所以在执行代码时
处理这些包装器不会导致性能损失
1.9 简史
C#主要考虑的是必要的OOP特性,它还具备语言的互操作性----在很大程度上甚至比COM更强大,C++的头文件已经删除,替代
以自我描述的装配件
1.10 小结
分享到:
相关推荐
《深入.NET平台和C#编程》是一本专为.NET开发者准备的高级教程,它涵盖了.NET框架的核心概念以及C#编程语言的深入理解。在第一章中,我们通常会接触到以下关键知识点: 1. **.NET Framework简介**: .NET Framework...
总的来说,深入.NET平台与C#编程的学习,不仅要求我们掌握基本语法,更需要理解并熟练运用高级特性如继承、接口和序列化。这些知识对于构建高效、可维护的软件系统至关重要。通过实际项目的练习,我们可以加深对这些...
《C#2005 .NET3.0高级编程学习笔记》是一份深入探讨C#2005和.NET Framework 3.0平台的详细资料,涵盖了C#语言特性和.NET 3.0框架的各个方面。这篇笔记旨在帮助开发者深化对C#编程的理解,掌握.NET 3.0的新特性,并...
### C#高级编程《第7版》读书笔记(7-9章)——运算符和类型强制转换 #### 一、C#中的运算符 在C#编程语言中,运算符是一组预定义的符号,用来执行特定的计算任务。根据功能的不同,C#中的运算符大致可以分为以下几...
C#是一种由微软开发的现代、类型安全的面向对象编程语言。自从2000年首次发布以来,C#经过了...同时,对于希望深入挖掘C#高级特性的开发者,这本书提供了丰富的资源和示例,以帮助他们掌握C#编程的最新趋势和最佳实践。
深入了解.Net FrameWork、掌握C#语法,学会C#编程,掌握数据结构、常用算法和面向对象的思想。 针对循环、数组、类的概念、类的构建、类的使用、对象的创建、面向对象的思想、集合、排序、IO操作等知识点先后安排2...
深入了解.Net FrameWork、掌握C#语法,学会C#编程,掌握数据结构、常用算法和面向对象的思想。 针对循环、数组、类的概念、类的构建、类的使用、对象的创建、面向对象的思想、集合、排序、IO操作等知识点先后安排2...
《C# 6.0学习笔记:从第一行C#代码到第一个项目设计》是由周家安编著的一本深入浅出的C#编程教程。这本书主要针对C#初学者和有一定基础的开发者,旨在帮助读者全面理解C# 6.0版本的新特性和编程技巧,并通过实际项目...
这份压缩包文件包含的是.NET培训高级班的第十期全套学习资源,特别强调了“含代码”,这意味着学习资料不仅有理论讲解,还提供了实际编程示例,帮助学员深入理解并实践.NET技术。 【描述】.Net培训高级班全套资料,...
编写第一个C#程序通常是输出“Hello World!”,这是一个简单的示例,用于熟悉C#的基本语法和结构。 ```csharp using System; namespace HelloWorld { class Program { static void Main(string[] args) { ...
深入了解.Net FrameWork、掌握C#语法,学会C#编程,掌握数据结构、常用算法和面向对象的思想。 针对循环、数组、类的概念、类的构建、类的使用、对象的创建、面向对象的思想、集合、排序、IO操作等知识点先后安排2...
【C#.NET编程基础】 C#.NET是一种由微软开发的面向对象的编程语言,它是在.NET Framework的基础上构建的。...通过实践编写简单的控制台程序,可以逐步建立对C#编程的基础认知,为进一步深入学习打下坚实的基础。
杨中科的.Net培训实况教学视频涵盖了从基础到高级的.NET知识,包括C#编程语言的学习,以及如何使用开发工具Visual Studio。 1. **.NET Framework**: 这是一个统一的开发框架,提供了类库和运行时环境CLR(Common ...
在C#编程中,委托和事件是两个核心概念,尤其在.NET Framework中扮演着至关重要的角色。理解并熟练运用它们对于提升C#开发能力至关重要。本文将通过实例逐步解析委托和事件的原理及应用。 首先,让我们从委托的概念...
在C#编程学习中,掌握以下几个核心知识点至关重要: 1. **基础语法**:C#的基础语法类似于C++和Java,包括变量声明、数据类型(如int, string, bool等)、控制流语句(if, switch, for, while等)以及函数定义。...
简介:本书由浅入深地讲解Visual C# 2005编程知识,全书内容分为6篇,共27章,第一篇介绍Visual Studio 2005开发环境和C#基础,其中包括Visual C# 2005简介,C#语言基础,面向对象编程基础,数组类和集合类,...