1.1 在.NET之前
 C#发音:see shap
 1.1.1 20世纪90年代后期的Windows编程
  20世纪90年代后期各语言缺点:
   1.纯Win32 API不是面向对象的,而且工作量比MFC的更发
   2.MC是面向对象的,但是他却不一致,并逐渐变得陈旧
   3.COM虽然概念上简单。但实际代码复杂,而且需要更多丑陋的,不雅的底层代码
  共同缺点:
   主要针对桌面程序而不是Internet的开发
1.2 进入Microsoft.NET
 .NET框架是一种比MFC或COM编程技术更一致并面向对象的环境
 特点
  多平台:可以在广泛的计算机上运行,包括从服务器,桌面机到PDA和移动电话
  行业标准:使用行业标准的通信协议,比如XML,HTTP,OAP和WSDL
  安全性:提供更加安全的执行环境(即使有来源可疑的代码存在)
 1.2.1 .NET框架的组成
  

1.编程工具--产生可执行代码(code)-->公共语言运行库(CLR)--使用-->基类库(BCL)
   2.编程工具--使用-->基类库(BCL)
  CLR(执行环境):
   Common Language Runtime,公共语言运行库
   在运行期管理程序的执行,包括内容:
    内存管理
    代码安全验证
    代码执行
    垃圾收集
   编程工具涵盖了编码和调试需要的一起,包括:
    Visual Studio集成开发环境
    .NET兼容的编译器(例如:C#,VB.JScript和托管的C++)
    调速器
    服务器端改进,比如ASP.NET
  BCL(是.NET框架使用的一个大的类库):
   Base Class Library,基类库
   可以在程序中使用
 1.2.2 大大改进的编程环境
  1.面向对象的开发环境
   完全面向对象
   形成良好的集成环境
   为本地程序和分布式系统提供了一致的,面向对象的编程模型
   为桌面,移动,Web开发提供了软件开发接口,涉及的对象范围广
  2.自动垃圾收集
   CLR有一项服务为GC(Garbage Collector,垃圾收集),"自动管理内存"
   自动从内存中删除程序不再访问的对象
   释放内存和检查内存泄漏
  3.互操作性
   允许在不同的.NET语言编写的软件模块间无缝地交互
    一种.NET写的程序可以使用甚至继承用另外一种.NET语言写的类(只要遵循一定的规则)
    很容易地集成不同编程语言生成的模块(有时被称为:"语言无关的")
   平台调用(platfrom invake,P/Invoke)
    允许调用并使用非.NET的,但通过Win32 DLL导出的纯C函数的代码(比如Windows API)
   允许与COM的互操作
    互相调用
  4.不需要COM
   .NET框架摆脱了COM的束缚,不需要使用COM
  5.简化的部署
   更加容易
   不需要使用注册表注册,一个程序只需要被复制到目标机器便可以运行
   并行执行
    允许一个DLL的不同版本在同一台机器上存在
  6.类型的安全性
   CLR检查并确保及其他数据对象的类型安全,即使是在不同编程语言编写的组件之间
  7.基类库
   提供了一个人广泛的基础类库
   BCL/FCL
    通用基础类:一组极为强大的工具,比如字符串操作,安全和加密
    集合类:实现了列表,字典,散列表以及位数组
    线程和同步类:用于创建多线程程序
    XML类:创建,读取以及操作XML文档
 1.3 编译成CIL
  程序集代码:非本机代码,,,CIL(Common Intermediate Language,公共中间语言)
  程序集包含:
   CIL
   使用的类型的元数据
   对其他程序引用的元数据
   CIL术语:
    IL/MSIL
 1.4 编译成本机代码并执行
  程序的CIL调用时才会被编译
  CLR执行步骤:
   检查程序集的安全特性
   在内存中分配空间
   可执行代码发送给实时编译器,把其中一部分编译成本机代码
  不被调用的代码不会被编译成本机代码,被调用的代码只被编译一次
  CIL-->本机代码 CLR在它运行时进行管理(释放无主内存,检查数组边界,检查参数类型和管理异常等)
   术语:
    托管代码:
     为.NET框架编写的代码
     需要CLR
    非托管代码:
     不在CLR控制之下运行的代码,比如:Win32 C/C++ DLL
  本机映像生成器或Ngen:
   可以把一个程序集转换成当前处理器的本机代码(免除了运行时的JIT编译过程)
  编程的执行综述:
   

1.5 CLR
 .NET框架的核心组件,在操作系统的顶层并管理程序的执行
 

提供服务:
  自动垃圾收集
  安全和认证
  通过访问BCL得到广泛的编程功能
1.6 CLI
 有序和协作:标准
 公共语言基础结构
 把所以.NET框架的组件连结成一个内聚的,一致的系统
 展示了系统的概念和架构
 必须坚持的规则和约定
  组成:

  

开放的国际标准规范
 CLI的重要组成部分:
  1.公共类型系统(CTS)
   定义了那些托管代码中一定会使用的类型的特征:
    CTS定义了一组丰富的内置类型,以及每种类型确定的,详细的特性
    .NET兼容编程语言提供的类型通常映射到CTS中已定义的内置类型集的某一个特殊子集
    *CTS最重要的特征之一是所有类型都继承自公共的基类--object*
  2.公共语言规范(CTS)
   详细说明了一个.NET兼容编程语言的规范,属性和行为
   其主题包括数据类型,类结构和参数传递
1.7 缩写
 1.程序集
  公共中间语言:
   CIL
   IL
   MSIL
 2.公共语言基础结构(CLI)
  公共类型系统:
   CTS
  公共语言规范:
   CLS
 3.公共语言运行库(CLR)
  垃圾收集:
   GC
  实时编译器:
   JIT
  基类库:
   BCL

C#图解教程第一章 C#和.NET框架的更多相关文章

  1. C# 图解教程 第一章 C#和.NET框架

    C#和.NET框架 在.NET之前.NET时代 .NET框架的组成大大改进的编程环境 编译成CIL编译成本机代码并执行CLR Common Language RuntimeCLI Common Lan ...

  2. 村田噪声抑制基础教程-第一章 需要EMI静噪滤波器的原因

    1-1. 简介 EMI静噪滤波器 (EMIFIL®) 是为电子设备提供电磁噪声抑制的电子元件,配合屏蔽罩和其他保护装置一起使用.这种滤波器仅从通过连线传导的电流中提取并移除引起电磁噪声的元件.第1章说 ...

  3. [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍

    注:为了看上去比较清晰这里只转载了中文 原地址:  [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍 本章将引导您完成安装和设置开发环境,然后你就可 ...

  4. javascript进阶教程第一章案例实战

    javascript进阶教程第一章案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过练习积累JS的使用技巧 二.实例 练习1:删除确认提示框 实例描述: 防止用户小心单击了“删除”按钮,在用 ...

  5. [ABP教程]第一章 创建服务端

    Web应用程序开发教程 - 第一章: 创建服务端 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以下技术开发 ...

  6. 《进击吧!Blazor!》系列入门教程 第一章 8.部署

    <进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门教程视频,此教程能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...

  7. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  8. OpenGL完全教程 第一章 初始化OpenGL

    第一章 初始化OpenGL 无论是什么东西,要使用它,就必须对它进行初始化.如果你之前使用过GDI,你应该也多多少少了解到GDI在绘制图形之前要为之创建渲染环境.OpenGL也一样.本章给出的代码,大 ...

  9. python 教程 第一章、 简介

    第一章. 简介 官方介绍: Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使 ...

随机推荐

  1. 第四届河南省ACM 表达式求值 栈

    表达式求值 时间限制: 1 Sec  内存限制: 128 MB 提交: 14  解决: 7 [提交][状态][讨论版] 题目描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简 ...

  2. JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流

    上一节,我们分析了常见的节点流(FileInputStream/FileOutputStream  FileReader/FileWrite)和常见的处理流(BufferedInputStream/B ...

  3. Python爬虫(十二)_XPath与lxml类库

    Python学习指南 有同学说,我正则用的不好,处理HTML文档很累,有没有其他的方法? 有!那就是XPath,我们可以用先将HTML文档转换成XML文档,然后用XPath查找HTML节点或元素. 什 ...

  4. Mysql的安装和图形化界面的使用

    访问mysql网址:https://dev.mysql.com/ 下面需要登录你的oracle账号进行下载就好~ 下载之后是一解压包形式存在的~ 解压之后的文件 这里我新建了my.ini的文件~将my ...

  5. java 中Map 使用

    Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复.所以通过指定的key就可以取出对应的value.Map接口定义了如下常用 ...

  6. libmemcached的安装及測试

    1.安装memcached ~$ wget http://memcached.googlecode.com/files/memcached-1.2.8.tar.gz. $ tar xvzf lmemc ...

  7. Creational模式之Builder模式

    1.意图 将一个复杂对象的构建与它表示分离,使得相同的构建过程能够创建不同的表示. 查看很多其它请点击 2.别名 无 3.动机 一个RTF(Rich Text Format)文档交换格式的阅读器应能将 ...

  8. Python 项目实践一(外星人入侵)第二篇

    接着上次的继续学习. 一 创建一个设置类 每次给游戏添加新功能时,通常也将引入一些新设置.下面来编写一个名为settings的模块,其中包含一个名为Settings的类,用于将所有设置存储在一个地方, ...

  9. JAVA入门[7]-Mybatis generator(MBG)自动生成mybatis代码

    一.新建测试项目 新建Maven项目MybatisDemo2,修改pom.xml引入依赖.dependencies在上节基础上新增 <dependency> <groupId> ...

  10. MQTT 设计原则

    MQTT 设计原则 简单. 没有杂七杂八的花俏功能,作为一个基础组件构建实用的系统,易于实现. "发布/订阅"消息传递方式. 随时接入随时发布.接收消息,无需太多其他"事 ...