C#编写的托管代码是由公共语言运行时(Common Language Runtime,CLR)管理的,所以一般来说想要运行C#程序的电脑就必须安装好.NET Framework。要知道是否已安装.NET Framework,可以查看系统目录(C:\Windows\System32,假如C盘是系统盘)中是否存在mscoree.dll文件。存在该文件,表明.NET Framework已安装。
如果要知道一台机器上安装了哪些版本的.NET Framework,可以检查注册表项(“运行”=>输入regedit)的子项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
根据笔者的测试,还可以在这个目录下面查看电脑上安装的.NET Framework的所有版本:
C:\WINDOWS\Microsoft.NET\Framework
.NET Framework 2.0是Windows XP及以上版本系统自带的。
托管程序集包含了元数据和IL(中间语言)。IL是与CPU无关的机器语言,它比大多数CPU机器语言都要高级。IL能访问和操作对象类型,并提供指令来创建和初始化对象、调用对象上的虚方法以及直接操作数组元素,还提供了抛出和捕捉异常的指令来实现错误处理。可以将IL视为面向对象的机器语言。
在执行托管代码之前,CLR的JIT(just-in-time或者”即时”)编译器会把托管代码对应的IL转换成本地CPU指令。将IL编译成本地CPU指令时,CLR会验证IL代码,为了就是确定代码所做的都是安全的,比如验证调用方法的参数数量是否正确,参数类型是否正确,返回值是否正确等。
.NET Framework配套提供的NGen.exe工具可以将IL代码编译成本地代码。这些代码经过编译后,CLR的JIT编译器不需要在运行时编译IL代码,这提升了应用程序的性能,如加快应用程序启动速度等。
在CLR中,类型是CLR的根本,所以必须有一个”通用类型系统”,即CTS。CTS指定了类型可视性规则和类型成员的访问规则:
private:成员只能由同一个类类型中的其他成员访问
protected:成员可由派生类型访问,而且不管那些类型是否在同一个程序集中
internal:成员可由同一个程序集中任何代码访问
public:成员可由任何程序集中的任何代码访问