代码改变世界

C#高级编程风云再现之一 (.NET体系结构)

2012-01-11 11:32  哒不溜  阅读(343)  评论(0)    收藏  举报

这是C#高级编程的第一章

  在很早很早以前就听说过这样一本书——《C#高级编程》红皮书,所以一直想找个机会好好研究研究这本书,所以在今年暑假的时候我在自己经济十分拮据的情况,向同学借钱买了这本书(当当网正在做活动,满120减20于是我一狠心买了两本书:一本“C#高级编程 第7版”也是最新版,另一本是“UML基础教程”),当拿到货之后,看看书的质量还不错,相当有分量的一本书。拿到手之后就看看两天,但是之后就一直没动过了,但是这几天在博客园中看到好人都在写年终总结,看看别人写的内容,简直让我无地自容啊!园子里的大牛们好多都把自己在2011年里看过的书列出来了,我看到之后,觉得自己跟他们的差距那不是一般的大,也知道了为什么别人会被称作技术高人或技术牛人了。以后一定要多向园子里的各位前辈们学习,多看看书。 

  在以后,我会把我看书的心得体会通过博客园这个平台展示出来,接受大家的建议和批评,希望和大家共同探讨,共同进步!下面开始我的第一篇心得体会

第一章 .NET框架体系(2012-01-10)

 

1.C#与.NET的关系

C#是一种相当新的编程语言,C#的重要性体现在以下两个方面:
它是专门为与Microsoft 的.NET Framework一起使用而设计的(.NET FrameWork是一个功能非常丰富的平台,可开发、部署和执行分布式应用程序)
它是一种基于现代面向对象设计方法的语言,再设计它时,Microsoft还吸取了其他类似语言的应验,这些语言是进20年来面向对象规则得到广泛应用后才开发出来的。
在这里有个很重要的问题大家要弄明白:C#本身只是一种语言而以,尽管它是用来编写面向.NET环境的代码,但它本身不是.NET的一部分。可以这样理解:.net支撑的一些特性,C#并不支持。而C#语言支持的另一些特性,.net却不支持在(比如运算符重载).
但是,因为C#语言和.NET一起使用,所以如果要使用C#高效的开发应用程序,理解Framework是非常重要的,下面来介绍一下.net 的内涵

2.公共语言运行库(CLR)

.NET FrameWork的核心就是运行库执行环境,即公共语言运行库(CLR)或者说是.net运行库。通常在CLR控制下运行的代码称为托管代码(managed code).
在CLR执行编写好的源代码(C#或其他支持.net Framework的语言)之前,需要进行两次编译:
第一次编译:把源代码编译为Microsoft中间语言(IL);
第二次编译:CLR把IL编译为平台专用的代码。
2.1 平台无关性
      编译为中间语言就可以获得.NET平台无关性,这与编译为Java字节码就会得到Java平台无关性是一样的。(注意:.NET的平台无关性目前只是停留在理论的范畴,.NET的完整实现只能用于Windows平台)

2.2 提高性能
      IL总是即时编译的(称为JIT编译)
  JIT编译器并不是把整个应用程序一次编译完(这样会有很长的启动时间),而是只编译它调用的那部分代码(需要用到哪些代码就编译那些代码)。代码编译一次之后,得到的地可执行程序就存储起来,直到退出该程序为止,这样下次在程序没有退出的时候运行这部分代码时,就不需要重新编译了。这个过程要比一开始就编译整个应用程序代码的效率高得多,因此任何应用程序的大部分代码实际上并不是在每次运行期间都执行
      这样就解释了为什么托管IL代码几乎和本地机器代码的执行速度一样快了,但是这并没有说明为什么会提高性能。其原因是编译过程的最后一部分是在运行时进行的,JIT编译器确切的知道程序运行在什么类型的处理器上,可以利用该处理器提供的任何特性或者特定的机器代码指令来优化最后的可执行代码。
      传统的编译器会优化代码,但它们的优化过程是独立于运行代码的特定处理器的。这是因为传统的编译器是在发布软件之前编译为本地机器可执行的代码。即编译器不知道运行代码的处理器的类型,例如该处理是兼容x86的处理器还是Alpha处理器。

2.3 语言的互操作性
      使用IL不仅支持平台无关性,还支持语言的互操作性。简而言之,就是将任何一种语言编译为IL,编译为IL的代码可以与从其他语言编译过来的代码进行交互操作。也可这样理解:只要支持.net Framework的语言,可以进行互操作。 

3.中间语言(IL)

Microsoft中间语言的特点:它们都是低级语言,语法很简单(使用数字代码,而不是文本代码),可以非常快速的转换为本地机器码。 

4.程序集(assembly)

程序集有两种类型,即私有程序集和共享程序集 

5. .NET Framework(类)

从开发人员的角度来开,编写托管代码的最大好处是可以使用.NET基类。.NET基类是一个内容丰富的托管代码类的集合,它可以完成以前要通过Windows API来完成的绝大多数任务。可以从任何适用的.NET基类实例化对象,也可以从他们派生自己的类。 

6.名称空间

名称空间是.NET避免类名冲突的一种方式。
名称空间不过是数据类型的一种组合方式,但名称空间中所有数据类型的名称都会自动加上该名称空间的名字为前缀。名称空间还可以相互嵌套。例如,大多数用于一般目的的.NET基类位于名称空间System中,基类Array在这个名称空间中,所以其全名是System.Array. 

7.用C#创建.NET应用程序

创建ASP.NET应用程序
       1.ASP.NET的功能
       2.Web窗体
       3.Web服务器控件
       4.XML Web服务
创建Windows窗体
使用WPF
Windows控件
Windows服务
WCF
Windows WF 

8.小结

简要回顾一下.NET Framework的重要方面以及它与C#的关系。首先讨论了所有面向.NET的语言如何编译为中间语言IL(之后由公共语言运行库进行编译和执行),接着讨论了.NET的下述特性在编译和执行过程中的作用: 

1.程序集和.NET基类

2.COM组件

3.JIT编译

4.应用程序域

5.垃圾回收

6.还讨论了IL的特征

下图简要说明了这些特征在编译和执行过程中如何发挥作用。



大家看到这篇博客后,如果有意见和想法请给我留言,我会及时回复您的。