http://blog.csdn.net/zhangbp/article/details/8180629
下面让我来做一个整体的介绍,来帮助你来了解CLR中的一些另人激动的特性。理解这些特性将更好的帮助你来理解CLR。
*让我们在同一个系统中运行 ——— CTS (通用类型系统)
*属于我们自己的空间 ——— NameSpace (名称空间)
由于我想简写,因此会直接采用原词。但为了帮助理解,我在这里给出翻译:
MSIL(MicrosoftIntermediate Language)微软的中间语言。和Java的虚拟机类似,是与CPU无关的指令集。当编译为托管代码时,编译器将源代码翻译为MSIL,
MSIL 汇编程序从 MSIL 汇编语言生成可移植可执行的 (PE) 文件。可以运行结果可执行文件(该文件包含 MSIL 和所需的元数据)以确定 MSIL 是否按预期执行。这就是我为什么会谈到PE。
http://www.csdn.net/Develop/article/13%5C13683.shtm
那么PE文件是怎么执行的呢?下面是一个典型的.NET应用程序的执行过程:
1. 用户执行编译器输出的应用程序(PE文件),操作系统载入PE文件,以及其他的DLL(.NET动态连接库)。
4. 程序的执行过程中,GC(垃圾收集器)负责内存的分配,释放等管理功能。
ms-help://MS.VSCC/MS.MSDNVS.2052/cptools/html/cpconmsildisassemblerildasmexe.htm
*让我们使用同一种语言 ——— CLR (公共语言运行时)1.CLR的特性:
当编程人员在用自己喜欢的编程语言写源代码的时候, 这个源代码在被转化成媒介语言(IL)之前,先被编译成了一个独立的可执行单元(PE)。这样无论
你是一个VB。NET程序员,或一个C#程序员,甚至是使用托管的C++的程序员。只要被编译成IL就是同等的。
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconkeyconceptsinsecurity.htm
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconassemblyversioning.htm
最后,可以使用诸如System.Reflection.Assembly.Load 之类的方法进行动态引用并只提供部分信息;然后在应用程序配置文件中用
http://www.csdn.net/Develop/Read_Article.asp¡Id=13895
http://www.csdn.net/Develop/article/13%5C13896.shtm
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/cpre
*我们手中的零件 ——— Assembly (装配件)1.关于装配件*让我们在同一个系统中运行 ——— CTS(通用类型系统)1.先来谈谈System.Object ——— 一切NET的根源
CTS中的所有类全部都是从System.Object对象派生而来。它提供了基本的操作如下:
用作特定类型的哈希函数,适合在哈希算法和数据结构(如哈希表)中使用。
另外CTS还定义了一组跨语言的对象。大多数编译器都提供这些对象的别名。这里以C#为例说明:
object ,int ,string,sbyte,byte,short,long,float,char,double,bool decimal.
以下两个论题,由于我在论坛中答了太多遍,如果你有兴趣可以去CSDN中C#版去搜索,会找到很多,基本我都参与了。因此,这里我只放连接。
ms-help://MS.VSCC/MS.MSDNVS.2052/csref/html/vcrefreferencetypes.htm
ms-help://MS.VSCC/MS.MSDNVS.2052/csref/html/vcrefvaluetypes.htm
3.不要把boxing and unboxing 和类型转换混淆
ms-help://MS.VSCC/MS.MSDNVS.2052/csref/html/vclrfboxingunboxingpg.htm
*宇宙大爆炸后的产物 ——— metadata (元数据)1. metadata和IDL的关系:
public class yarshrayConsoleApp
o=om.GetCustomAttribute(typeof(Yarshray),true);
YarshrayAttribute ya=( YarshrayAttribute)o;
Console.WriteLine(“name:”+ys.Name);
Console.WriteLine(“Age:”+ys.Age);
Console.WriteLine(“Sex:”+ys.Sex);
理解.NET中的 CLR原理*让我们的语言可以交流 ——— CLS (公共语言系统)1.统一标准的制定:
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconwhatiscommonlanguagespecification.htm
CLS加载器管理应用程序域。这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。
· 使用 Assembly 定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。
· 使用 Module 了解如下的类似信息:包含模块的程序集以及模块中的类等。您还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
· 使用 FieldInfo 来了解如下的类似信息:字段的名称、访问修饰符(如 public 或 private)和实现详细信息(如 static)等;并获取或设置字段值。
· 使用 EventInfo 来了解如下的类似信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等;并添加或移除事件处理程序。
· 使用 PropertyInfo 来了解如下的类似信息:属性的名称、数据类型、声明类型、反射类型和只读或可写状态等;并获取或设置属性值。
· 使用 ParameterInfo 来了解如下的类似信息:参数的名称、数据类型、参数是输入参数还是输出参数,以及参数在方法签名中的位置等。
System.Reflection.Emit命名空间的类提供了一种特殊形式的反射,使您能够在运行时构造类型。
反射也可用于创建称作类型浏览器的应用程序,它使用户能够选择类型,然后查看有关选定类型的信息。
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemReflection.htm
private const String SayName = "I’m Yarshray";
public classYarshrayReflection {
Assembly as = Assembly.Load("SayMyName");
Type t = as .GetType("SayMyName");
MethodInfo mi = t.GetMethod("OutPutName");
Object o = Activator.CreateInstance(t);
*属于我们自己的空间 ——— NameSpace (名称空间)1.也谈名称空间:
关于名称空间我想不用我多说。它相当一个可以包含类的文件夹。但要注意一点,尽量把相关的类放到同一个名称空间中。因为那样比较方便维护。
使用namespace可以方便的定义名称空间,上面我定义了一个名为YarshrayTools的名称空间,using可以很方面的引入名称空间
YarshrayTools.YarshrayClassys=new YarshrayTools.YarshrayClass();
你也许,注意到了,我使用的是带名称空间的引用。这种方式叫做 Full Qunalfied Name(完全限定名),当然,如果你在代码中usingYarshrayTools
允许使用 Windows 资源管理器查看和操作全局程序集缓存的内容。
从一个或多个文件(资源文件或 Microsoft 中间语言 (MSIL) 文件)生成一个带有程序集清单的文件。
读取程序集内的元数据并向注册表添加必要的项,以便使 COM 客户端能够透明地创建 .NET 框架类。
显示失败的程序集绑定的详细信息。这些信息有助于您诊断 .NET 框架无法在运行时找到程序集的原因。
允许查看和操作全局程序集缓存和下载缓存的内容。由于 Shfusion.dll 提供了类似的功能,所以可以从构造脚本、生成文件文件和批处理文件使用 Gacutil.exe。
允许通过执行指定程序集的安装程序组件,安装和卸载服务器资源。
从托管程序集创建本机映像,并将其安装在本地计算机的本机映像缓存中。
提供图形界面以管理 .NET 框架安全策略和使用远程处理服务的应用程序。此工具还允许管理和配置全局程序集缓存中的程序集。
通过加载、注册程序集并将类型库生成、注册和安装到现有的 COM+ 1.0 应用程序中,将托管类添加到 Windows 2000 组件服务中。
使用一种称为“远程处理”的技术帮助您编译与 XML Web services 进行通信的客户端应用程序。
将 COM 类型库中发现的类型定义转换成托管元数据格式的等同定义。
发现位于 Web 服务器上的 XML Webservices 的 URL,并将与每个 XML Webservices 相关的文档保存到本地磁盘上。
生成的 XML 架构应遵从 WWW 联合会 (W3C) 提出的 XSD 语言。此工具可生成公共语言运行库类和 XSD 架构文件的 DataSet 类。
Microsoft CLR 调试器 (DbgCLR.exe)
使用图形界面提供调试服务,以帮助应用程序开发人员查找和修复针对运行库的各类程序中的错误。
使用公共语言运行库“调试 API”提供命令行调试服务。用于查找和修复针对运行库的各类程序中的错误。