本章内容:

编译和运行面向 .NET的代码

MSIL的优点

值类型和引用类型

数据类型化

理解错误处理和特性

程序集、.NET基类和命名空间

本章主要介绍一些概念,内容不多。

C#是专门为Microsoft的.NET Framework设计的一门语言,是一种面向对象方法的语言。

C#就其本身而言,只是一门语言,尽管它用于生成.net Framework的代码,但它本身不是.net的一部分。.net支持的一些特性C#本不支持,反之一样,如:C#支持运算符重载,.net是不支持的。

.NET Framework的核心是其运行库执行环境,称为公共语言运行库(CLR)或.NET运行库。通常将在CLR控制下运行的代码称为托管代码(managed code)

编译过程:

把源代码编译为MSIL(Microsoft Intermediate Language),Microsoft中间语言。

CLR把IL编译为平台专用代码

IL: 低级语言,语法简单,可快速转换为本地机器码,区分大小写,基于堆栈的语言。优点:平台无关、提高性能及语言的互操作性。

IL主要特征:

面向对象和使用接口

值类型和引用类型之间的显著差异

强数据类型化

使用异常来处理错误

使用特性

CTS: 通用类型系统,通过类型,用一种编程语言写的代码能与用另一种语言写的代码沟通,CTS描述了类型的定义和行为。

CLS: 公共语言规范,和CTS一起确保语言的互操作性,是一个最低标准集。

GC: 垃圾回收器用来在.NET中进行内存管理,特别是它可以恢复正在运行的应用程序需要的内存。

应用程序域是.NET中的一个重要技术改进,是分离组件的一种方式,用于减少运行应用程序的系统开销。

程序集:包含编译好的,面向.NET Framework的代码逻辑单元,可以存储在多个文件中。

可执行代码和库代码使用相同的程序集结构,唯一的区别是可执行的程序集包含一个主程序入口,而库程序集不包含。

程序集的一个重要特性是它们包含的元数据描述了对应代码中定义的类型和方法。程序集也包含描述程序集本身的元数据。

私有程序集是最简单的一种程序集类型,一般附带在某个软件上,且只能用于该软件。因为私有程序集完全是自包含的,所以部署它的过程就很简单,只需把相应的文件放在文件系统对应文件夹中即可(不需要注册表项),这个过程称为“0影响(xcopy)安装”。

共享程序集是其他应用程序可以使用的公共库。因为其他软件可以访问共享程序集,所以需要采取一定的保护措施防止名称冲突及版本覆盖的风险。

解决办法是把共享程序集放在文件系统的一个特定的子目录树中,称为GAC(全局程序集缓存)。

为了避免名称冲突,应根据私钥加密法为共享程序集指定一个名称(对于私有程序集,只需要指定与其主文件名相同的名称即可),该名称称为强名,保证其唯一性,必须由要引用共享程序集的应用程序来引用。

与版本覆盖风险相关的问题,可以通过在程序集清单中指定版本信息来解决,也可以通过同时安装来解决。

程序集存储了元数据,包括在程序集中定义的所有类型和这些类型的成员三细节,所以可以编程访问这些数据,这个技术称为反射。

[C#高级编程].NET体系结构的更多相关文章

  1. UNIX环境高级编程——计算机体系结构基础知识

    无论是在CPU外部接总线的设备还是在CPU内部接总线的设备都有各自的地址范围,都可以像访问内存一样访问,很多体系结构(比如ARM)采用这种方式操作设备,称为等都会产生异常. 通常操作系统把虚拟地址空间 ...

  2. C#高级编程9-目录

    C#高级编程 ===================================================== .NET体系结构 核心C# 对象与类型 继承 泛型 数组 运算符和类型强制转换 ...

  3. 解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page13-20

    01 程序集 程序集是包含编译好的.基于.Net Framework的代码逻辑单元.一般来说,在Visual Studio中的一个项目即一个程序集,而一个项目中包含多种不同的代码文件.程序集分为可执行 ...

  4. 解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page6-13

    01 中间语言(IL) .Net中间语言(IL)的特性,很大程度上来自于要支持多语言互操作性.要支持多语言互操作性,是因为微软想搞一个大事情,将它的老产品线VB和VC++,VJ++都装入.Net架构中 ...

  5. 【读书笔记】C#高级编程(一).NET体系结构

    写在前面:从业两年来,一直停留在会用的阶段,而没有去仔细思考过为什么这么用,之前也大致扫过<c#高级编程>一书,这次想借一袭脑海中的冲动,再次好好仔细过过这本书,夯实基础,温故知新. 一. ...

  6. 解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page1-6

    前言 大家好.这是开通本号的第一篇文章.从事IT行业已经20年了,从使用PowerBuilder做企业信息系统开始,做了七八年开发,然后转型Java不是很成功,从07年之后,我转做产品经理,机缘巧合, ...

  7. 读《C#高级编程》第1章问题

    读<C#高级编程>第1章 .Net机构体系笔记 网红的话:爸爸说我将来会是一个牛逼的程序员,因为我有一个梦,虽然脑壳笨但是做事情很能坚持. 本章主要是了解.Net的结构,都是一些概念,并没 ...

  8. C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)),不对的地方欢迎指出与交流. 章节出自<Professional C ...

  9. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...

随机推荐

  1. .NET Framework各版本比较

    (1)本文比较了.NET Framework多个版本之间的区别,方便各位选择和切换.NET Framework. 版本号 发布日期 Visual Studio的版本 Windows上的默认情况 CLR ...

  2. UML学习(三)-----序列图

    UML的模型中可分为两种,动态模型和静态模型.用例图.类图和对象图都是UML中的静态结构模型.而在UML系统动态模型的其中一种就是交互视图,它描述了执行系统功能的各个角色之间相互传递消息的顺序关系.序 ...

  3. App瘦身

    http://www.zoomfeng.com/blog/ipa-size-thin.html https://github.com/ming1016/SMCheckProject

  4. php自动载入类的实践

    <?php //function __autoload($class_name) {//    require_once $class_name . '.php';//} spl_autoloa ...

  5. EB-SAM9G45裸机程序下载方法

    开发板:EB-SAM9G45 这里提供一种裸程序下载的方法. 在官方提供的下载方法中有手动下载和自动下载,它们都离不开SAM-BA软件,而该软件使用比较麻烦,而且操作不当很容易导致电脑蓝屏,还有一个很 ...

  6. QTimer太让人失望了,一秒触发一次事件都不准确。。

    今天做项目中,我用QTimer来模拟数据生成,在另外的设备上接受.另外设备上有时1秒读不到数据,查询原因很久,终于发现是QTimer的问题. 测试代码如下 有兴趣同学可以自己试试. t = new Q ...

  7. [Hibernate] - Annotations - Many To Many

    Hibernate annotation 多对多: 下面测试例子会自动生成一张表:card,这张是bank和user表的映射表.里头是bank_id和user_id两个组合字段. 如果想在这张映射表中 ...

  8. 暑假集训(1)第六弹 -----简单计算器(Hdoj1237)

    Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值.   Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算 ...

  9. 03-IOSCore - XML及解析、Plist

    一.XML 可扩展标记语言 是什么?是一段有规范的字符串, 用在哪?用在任何地方 语法: * 结点Node <结点名 属性名="属性值"> 结点内容 </结点名& ...

  10. python API的安全认证

    我们根据pid加客户端的时间戳进行加密md5(pid|时间戳)得到的单向加密串,与时间戳,或者其它字段的串的url给服务端. 服务端接收到请求的url进行分析 客户端时间与服务端的时间戳之差如果大于规 ...