展现C#(2):NGWS Runtime 基础

2016-01-29 19:27 1 1 收藏

展现C#(2):NGWS Runtime 基础,展现C#(2):NGWS Runtime 基础

【 tulaoshi.com - ASP 】

       作者:rainbow ASP动网先锋
  
  既然你已经具有了C#全面的印象,我也想让你了解NGWS runtime的全貌。C#依靠由NGWS提供的运行时;因此,有必要知道运行时如何工作,以及它背后所蕴含的概念。
  
  所以,这一章分为两部分——它们是所有的概念和使用的基础。两部分的内容虽然有些重叠,但它有助于加深理解正在学习的概念。
  
  
  2.1 NGWS Runtime
  
  NGWS和NGWS Runtime为你提供了一种运行时环境。该运行时管理执行代码,并提供了使编程更容易的服务。只要你的编译器支持这种运行时,你就会从这种受管理的执行环境中得益。
  
  你猜测C#编译器支持NGWS runtime很正确,但是不仅它支持NGWS runtime,VB和C++也支持。这些为支持运行时所创建的代码称作"受管代码"(managed code)。以下是你的应用程序从NGWS runtime那里所得到的利益:
  
  
  交叉语言集成(通过通用语言规范)
  
  自动内存管理(垃圾收集)
  
  交叉语言异常处理(统一展开)
  
  增强安全(包括类型安全)
  
  版本支持("DLL地狱"终结者)
  
  组件交互简化模式
  
  
  因NGWS runtime 要提供了所有的这些好处,编译器必须把元文件和受管代码一起发出。元文件描述代码中的类型,它和你的代码存在一起(与PE类似---PE为可变位执行文件)
  
  正如你从很多种交叉语言功能所看到的,NGWS runtime主要是关于高度集成交叉多异编程语言(tight integration across multiple different programming languages)。这种支持可达到允许你从一个VB对象派生出一个C#类的程度(我后面会给出要讨论的文章)。
  
  C#程序员将会喜欢的一个功能是,他们不必担心内存管理—也就是说不必担心臭名昭著的内存泄漏。NGWS runtime提供了内存管理,当对象和变量的生命期结束(不再被引用)时,垃圾收集器释放它们。我真的喜欢这个功能,因为在COM中的内存管理一直是我的一块心病。
  
  应该鼓励配置一个管理应用程序或者组件。因为管理应用程序含有元数据文件,NGWS runtime可以利用这些信息,以确保你的应用程序具有它所需的各种规定版本。所产生的明显效果为,由于你的代码没有相互之间的依赖,很少可能出现中断。
  
  这章余下来的将分为两部分,每一部分讨论NGWS runtime的各个方面,直到你的C#应用程序能执行为止。
  
  1、中间语言(Intermediate Language,缩写IL)和元数据
  
  2、即时编译器(just-in-time compliers,简称JITers)
  
  
  2.1.1 中间语言和元数据
  
  由C#编译器生成的受管代码并不是原始代码,但它是中间语言(IL)代码。这种IL代码自身变成了NGWS runtime的受管执行进程的入口。IL代码明显的优势在于它是CPU无关的,这也意味着,你要用目标机器上的一个编译器才能把IL代码转换成原始代码。
  
  尽管IL代码由编译器产生,但它并不是编译器提供给运行时仅有的东西。编译器同样产生有关你代码的元数据,它告诉运行时有关你代码的更多的东西,例如各种类型的定义、各种类型成员的签名以及其它数据。基本上,元数据是类型库、注册表内容和其它用于COM的信息。尽管如此,元数据还是直接和执行代码合并在一起,并不处在隔离的位置。
  
  IL和元数据存放于扩展了PE格式的文件中(PE格式用于.exe和.dll文件)。当这样的一个PE文件被装载时,运行时从文件中定位和分离出元数据和IL。
  
  在进一步说明之前,我想给你已有的IL指令的简短目录。尽管它不是一个完整的清单,也不需要你熟记和理解,但是它列出了你所必需的、C#程序所基于的知识基础。
  
  
  算术和逻辑操作符
  
  控制流
  
  直接内存访问
  
  堆栈操作
  
  参数和局部变量
  
  堆栈分配
  
  对象模式
  
  实例类型值
  
  临界区
  
  数组
  
  分型位置
  
  即时编译器(JITters)
  
  
  2.1.

来源:https://www.tulaoshi.com/n/20160129/1509423.html

延伸阅读
最近频繁的接触到泛型方面的问题,所以也不得不来学习一下了,开始主要是在MSDN的WebCast上去下载教学录象看的(李建忠老师的),本篇文章先介绍一下泛型入门方面的知识,希望能让刚开始学习泛型的朋友能够更快的入门,言归正传,首先我们来看一下泛型的基本概念。 最显著的一点就是它参数化了类型,把类型作为参数抽象出来,从而使我们在...
清单 5.10 通过一个索引获取一个IP地址 1: using System;2: using System.Net;3: 4: class ResolveDNS5: {6: IPAddress[] m_arrIPs;7: 8: public void Resolve(string strHost)9: {10: IPHostEntry iphe = Dns.GetHostByName(strHost);11: m_arrIPs = iphe.AddressList;12: }13: 14: public IPAddress this[int nIndex]15: {16: get17: {18: ...
下面这个例子示范如何创建和使用用户定义的类以及如何创建动态链接库。利用文本编辑器创建两个文件。第一个是Apple.cs,内容如下: public class Apple { private string variety = ""; public Apple(string appleVariety) { this.variety = appleVariety; } public void outputVariety() { System.Console.WriteLine(variety); } } ...
注:本文部份资料来自网络,如有侵权,请与我联系,我会在第一时间声明引用或将其删除!     当初学 C# 时是找个人大概问了一下数据类型和分支语句就开始做项目了。这两天又全面的看了一下相关的基础知识(学而时习之嘛),总结了25个问题: 1.静态成员和非静态成员的区别? 2.const 和 static ...
if语句 if语句用于测试条件并在条件为真时执行一桌或几条语句。 说明:if表达式后面不能带分号,否则它本身表示代码中的空语句,使编译器将空语句解释为在条件为真时执行的语句。 if (x == 10); // Warning! Extra semicolon! DoSomething(x); 这里DoSomething()函数总会执行,因为编译器不把它看成在条件为真时执行...

经验教程

609

收藏

35
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部