命名空间和程序集不一定相关 1. 同一个命名空间中的各个类型可能是在不同的程序集中实现的.(System.IO.FileStream在MSCorLib.dll程序集中,而System.IO.FileSystemWatcher在System.dll程序集中) 2. 同一个程序集中,也可能包含不同命名空间中的类.(System.Int32和System.Text.StringBuilder类型都在MSCorLib.dll程序集中)…
在 读经典——<CLR via C#>(Jeffrey Richter著) 笔记_高级管理控制(配置)中,是由程序集的发布者将程序集的一个新版本发送给管理员,后者安装程序集,并手动编辑应用程序后机器的 XML 配置文件.通常,发布者希望在修复了程序集的一个 bug 后,能采取一种容易的方式将新的程序集打包并分发给所有的用户.但是,发布者还需要一种方式告诉每个用户的 CLR 使用新的程序集版本,而不要继续使用旧版本.当然,可以指示每个用户手动修改应用程序或机器的 XML 配置文件,但这相当不方便…
一个应用程序的XML配置文件示例: <?xml version="1.0"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="AuxFiles;bin\subdir" /> <dependentAssembly>…
[实例代码] using System; public sealed class SomeType //-------------1 { //嵌套类 private class SomeNestedType{} //-------------2 //常量.只读字段和静态可读/可写字段 ; //-------------3 ; //-------------4 ; //-------------5 //类型构造器 static SomeType(){} //-------------6 //实例构…
[基元类型推荐] 推荐直接使用 FCL 类型. [理由] 编码时不至于困惑string与String的使用.由于C#的stirng(一个关键字)直接映射到System.String(一个 FCL 类型),所以两者没有区别,都可以使用.不至于困惑int在32位操系统和64位操作系统上代表的整数不同. 有的开发人员认为int在32位操作系统上运行时,代表32位整数:而在64位操作系统上运行时,代表64位整数,这个观点完全错误.在C# 中,int 始终映射到System.Int32,所以不管在什么操作…
[概念] 编译器直接支持的数据类型 [C#基元类型与对应的 FCL 类型] C#基元类型 FCL 类型 说明 sbyte System.Sbyte 有符号8位值 byte System.Byte 无符号8号位值 short System.Int16 有符号16位值 ushort System.UInt16 无符号16位值 int System.Int32 有符号32位值 uint System.UInt32 无符号32位值 long System.Int64 有符号64位值 ulong Syst…
public sealed class Program{ public static void Main() { System.Console.WriteLine("Hi"); } } 程序运行时,CLR会加载并初始化它.CLR读取程序集的CLR头,查找标识了应用程序入口方法(Main)的MethodDefToken.然后,CLR会检索MethodDef元数据表,找到该方法的IL代码在文件中的偏移量,把这些IL代码JIT(just-in-time)编译成本地(native)代码.编译时…
[前言] 方法执行前,CLR 会检测方法内代码引用的所有类型.同时 CLR 会分配一个内部数据结构,用来管理对所有引用的类型的访问. 首次执行方法时,托管程序集会把 IL 转换成本地 CPU 指令,并将其存储在一个动态分配的内存块中. 这是 CLR 的 JIT(just-in-time)编译器的功能. 在应用程序终止前,如果再调用同一个方法,会直接执行存储在动态分配内存块里的 CPU 指令. [图解] 1.当 “首次” 执行方法时,实际发生的事情如下图所示 就在 Main 方法执行之前,CLR…
1.元数据简介 全称:metadata 属性:数据表集合 产地:面向 CLR 的编译器在托管模块中生成 2.元数据内部结构及与托管模块的关系 [概述] 托管模块中包含着元数据,元数据是由一组数据表组成的.其中一些数据表描述了模块中定义的内容 [关系图] 3.元数据的用途 编译时,元数据消除了对本地 C/C++ 头和库文件的需求,因为在负责实现类型/成员的 IL 代码文件中,已包含和引用的类型/成员有关的全部信息.编译器可直接从托管模块读取元数据. Microsoft Visual Studio…
[应用场景] 程序集A访问程序集B定义的Internal访问类型的类的成员. [使用方式] 在构建程序集B的时候,引入System.Runtime.CompilerServices,以此来添加InternalsVisibleTo attribute [例子] 程序集B—— using System; using System.Runtime.CompilerServices;//为了InternalsVisibleTo 属性 //当前程序集中internal类型可由以下程序集中 //的任何代码访…