控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

对CLR和C#一些重要概念的总结

作者:佚名 出处:互联网 2010年12月01日 阅读:

对CLR和C#一些重要概念的总结
 
  C#源代码编译成托管代码,托管代码是一种中间语言,它介于高级语言(C#)和最低级语言(汇编语言和机器码)之间。运行的时候,公共语言运行库(时)(Common Language Runtime,CLR)用即时编译器(Just In Time,JIT)来动态编译托管代码。CLR构建的基础公共语言基础架构(Common Language Infrastructure,CLI)是一个国际标准。
  程序集(assembly)是CLR中可重用代码的离散单元(一般是exe或dll文件)。程序集可通过清单(mainifest)将多个模块(DLL)链接而成,清单描述了该程序集的内容。程序集拥有版本号。程序集还包含了描述其类型的元数据,它完整地描述了程序集中所包含的类型。简而言之,程序集是在CLR环境中有版本号、自描述的可重用单元。
  一个用C#编译的一个exe或dll文件(实际上是程序集)。托管程序集可以由任何托管语言创建。此外,多数情况下其它的托管语言也能使用该托管程序集。因此我们可以用多种托管语言来开发一个复杂的系统。例如需要创建低层类型时,C++/CLI是完成这项任务最合适的语言,但编写上层的用户界面时,使用C#或VB则更加合理,为了实现多种语言的互操作,CLI定义了一个类型系统的子集,称为通用语言规范(Common Language Specification ,CLS)。如果程序集中只用到了CLS兼容的类型,CLI就可以确保托管语言都能使用该程序集。CLS定义为CLI标准的一部分,CLI意在推动多语言的互操作。CLS是通用类型系统(Common Type System,CTS)的子集。
  LR能够根据需要加载程序集。版本判断是程序集加载过程中的关键一步,并且所有的程序集都有版本号。CLR编译器一开始就有版本识别的功能,因此避免了DLL陷阱这种通病——将一个共享的DLL替换成新的版本,导致使用旧版本的应用程序会崩溃。
  元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件 (Portable Execute,PE) 或存储在内存中的程序进行描述。将您的代码编译为 PE 文件时,便会将元数据插入到该文件的一部分中,而将代码转换为 Microsoft 中间语言 (MSIL) 并将其插入到该文件的另一部分中。在模块或程序集中定义和引用的每个类型和成员都将在元数据中进行说明。当执行代码时,运行库将元数据加载到内存中,并引用它来发现有关代码的类、成员、继承等信息。与C++不同,C#根本不需要包含头文件,而是使用更可靠、描述更丰富的元数据。使用元数据的模块是自描述的。托管模块中的元数据包含了所有的必需的信息。程序集是托管世界中的可重用单元,因此程序集实际上也是自描述的。有了元数据,用户可以访问、检查类型的定义和类型的属性。元数据能够在试图调用之前告诉用户特定对象的类是否支持某个方法,也能知道某个类是否从另一个类派生而来。检查元数据的过程称为反射。当反射程序集中的类型时,通常会用到System.Type对象。用C#中的typeof关键字、调用System.Assembly.GetType()方法、以及另外一些途径能获取实例的类型。
  CLR内部的垃圾回收器(garbage collector,GC)管理着一切关于对象布局的事情。它可以在任何恰当的时刻移动对象。所有的引用类型实例都位于托管堆上,CLR管理这些对象的位置,当对象被移动时,它会更新那些指向被移动对象的引用去指向新的位置。
  C#与其它程序语言不同的地方(值得注意):
  C#中有个空值结合表达式:x??y ——若非空值,由x值决定,否则由y值决定。
值类型可存在于栈和托管堆中。通常表示内存布局(footprint)占用小的非可变数据时,可以使用它们。在C#中使用struct关键字定义一些用户自定义类型。
  通过var关键字声明局部变量,有效地请求编译器保留一个本地内存块并附给一个推断类型(inferred type)。var 声明的变量必需初始化,而且只能出现在一个局部变理的声明中。
  在C#中的switch不允许把控制贯穿到下一节,每一节都必须用break语句(或其它控制的转移)来结束每个case节。
   is 操作符表示能否将一个指定的表过式转换为给定的类型,这种转换可能是引用转换也可以是装箱或拆箱转换,返回一个bool值。as操作符与is相似,但它会返回一个目标类型的引用,在不能做转换时返回null的引用。 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统