第一章C#和.net框架

  1. c#只是.net的一部分,.net不只包含C#。C#是一种程序语言,.net是一个框架/平台
  2. C#和.NET框架

    在.NET之前


    20世纪90年代,微软平台多数程序员使用VB、C或C++。他们使用的技术都有问题。

    技术 问题
    纯Win32 API 不是面向对象,工作量比MFC大
    MFC(Microsoft Foundation Class,微软基础类库) 虽是面向对象,但是不一致,且过于陈旧
    COM(Component Object Model,组件对象模型) 虽然概念简单,但实际代码复杂丑陋
    通病 以上技术都针对桌面程序开发,与Web编程大相径庭

    由此引出下一代平台的目标


    .NET时代


    .Net框架特点

    • 多平台
    • 采用行业标准的通信协议
    • 提供更安全的执行环境
    .NET框架的组成

    CLR(Common Language Runtime,公共语言运行库)

    • 内存管理和垃圾回收
    • 代码安全验证
    • 代码执行、线程管理及异常处理

    编程工具涵盖编码和调试所需一切

    • Visual Studio IDE
    • .Net兼容编译器
    • 调试器
    • 网站开发服务器端技术,比如ASP.NET或WCF

    BCL(Base Class Library,基类库):.NET框架使用的一个大类库

    大大改进的编程环境
    1. 面向对象
    2. 自动垃圾回收 
      CLR有GC(Garbage Collector,垃圾收集器),为你自动管理内存。(自动从内存中删除程序不再访问的对象)
    3. 互操作性
      • .NET语言允许不同.NET语言编写的软件模块无缝交互

        • 一种.NET语言写的程序可以使用甚至继承用另一种.NET语言写得类,只需遵循一定规则
        • 因为能容易的集成不同编程语言生成的模块,.NET框架有时被称为语言无关
      • .NET提供平台调用(platform invoke,P/Invoke):允许.NET代码调用并使用非.NET代码。它可以使用标准Win32 DLL导出的纯C函数代码,比如Windows API
      • .NET框架允许与COM互操作:.NET框架组件能调用COM组件,COM组件也能调用.NET组件。
    4. 不需要COM 
      摆脱了COM也就能摆脱下面这些东西,但系统中依然使用很多COM组件,所以偶尔还需要编写代码与这些组件交互,这将在25章讨论
      • IUnknown接口
      • 类型库
      • 手动引用计数
      • HRESULT
      • 注册表
    5. 简化的部署
      • .NET程序无需注册表,意味着最简单情形下,复制过去就能用。
      • .NET提供并行执行的特性,允许一个DLL的不同版本在同一机器上存在。即每个程序都可访问程序生成时使用的版本DLL
    6. 类型安全性 
      CLR检查并确保参数及其它数据对象的类型安全,不同编程语言编写的组件间也无问题
    7. 基类库 
      .NET框架提供一个庞大的基础类库(Base Class Library,BCL)。在写程序时可以使用其中的类
      • 通用基础类 : 一组强大的工具,比如文件操作、字符串操作、安全和加密。
      • 集合类 : 列表、字典、散列表及位数组
      • 线程和同步类 : 用于创建多线程程序
      • XML类 : 用于创建、读取及操作XML文档

    编译成CIL


    • 程序集要么可执行,要么是DLL
    • 程序集的代码不是本机代码,而是一种名为CIL(Common Intermediate Laguage,公共中间语言)的中间语言
    • 程序集包含以下内容
      • 程序的CIL
      • 程序中使用的类型的元数据
      • 对其它程序集引用的元数据

    CIL又叫IL(Intermediate Language)或MSIL(Microsoft Intermediate Language)


    编译成本机代码并执行


    程序的CIL直到被调用才会被编译成本机代码。运行时,CLR执行下面的步骤

    • 检查程序集安全特性
    • 在内存中分配空间
    • 把程序集中可执行代码发送给实时(Just-in-Time,JIT)编译器,把其中一部分编译成本机代码

    一旦CIL被编译成本机代码,CLR就在它运行时管理它,执行释放无主内存、检查数组边界、检查参数类型、管理异常等任务。同时两个术语由此而生

    • 托管代码:为.NET框架编写的代码,需要CLR
    • 非托管代码:不在CLR控制下运行的代码,比如Win32 C/C++ DLL 
      编译和执行

  3. CLR Common Language Runtime


    CLR 在操作系统的顶层,负责管理程序执行 
    还提供下列服务

    • 自动垃圾收集
    • 安全和认证
    • 通过访问BCL(Base Class Livrary,基类库)得到广泛的编程功能,包括如Web服务和数据服务之类的功能

    CLI Common Language Infrastructure


    过去由于语言和平台的不同,编程语言的内置类型各不相同。 
    例如,组成整数的位数对应不同语言和平台就有很大差别。 
    为了统一协作,必须有一组标准,这就是CLI(Common Language Infrastructure,公共语言基础结构)


     
    CLI的重要组成部分

    1. 公共类型系统 
      CTS(Common Type System,公共类型系统)定义了在托管代码中一定会使用的类型特征。

      • 定义了一组丰富的内置类型,以及每种类型固有的、独有的特性
      • .NET兼容编程语言的类型通常映射到CTS中已定义内置类型集的某一特殊子集
      • CTS的所有类型都继承自公共基类-object
      • 使用CTS可确保系统类型和用户定义类型能被任何.NET语言兼容使用
    2. 公共语言规范 
      CLS(Common Language Specification,公共语言规范)详细说明了一个.NET兼容编程语言的规则、属性、行为,其主题包括数据类型、类结构、参数传递。

    各种缩写


    C#的演化


    版本 焦点特性 章节
    5.0 异步 20
    4.0 命名参数和可选参数 5
    3.0 LINQ 19
    2.0 泛型 17
    1.0 C#

C#和.net框架的更多相关文章

  1. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  2. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  3. 旺财速啃H5框架之Bootstrap(五)

    在上一篇<<旺财速啃H5框架之Bootstrap(四)>>做了基本的框架,<<旺财速啃H5框架之Bootstrap(二)>>篇里也大体认识了bootst ...

  4. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  5. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  6. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

  7. 旺财速啃H5框架之Bootstrap(四)

    上一篇<<旺财速啃H5框架之Bootstrap(三)>>已经把导航做了,接下来搭建内容框架.... 对于不规整的网页,要做成自适应就有点玩大了.... 例如下面这种版式的页面. ...

  8. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  9. Hibernatel框架关联映射

    Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...

  10. [虾扯蛋] android界面框架-Window

    从纯sdk及framwork的角度看,android中界面框架相关的类型有:Window,WindowManager,View等.下面就以这几个类为出发点来概览下安卓开发的"界面架构&quo ...

随机推荐

  1. 一、用Delphi10.3 创建一条JSON数据

    一.用Delphi10.3构造一个JSON数据,非常之容易,代码如下: uses System.JSON; procedure TForm1.Button1Click(Sender: TObject) ...

  2. 用NI的数据采集卡实现简单电子测试之1——USB-6009简介

    本文从本人的163博客搬迁至此. 几年以来,一直担任学校“虚拟仪器”课程教师.以前上课都以介绍LabVIEW编程为主,硬件实验一直没有开展.这次借“西部高校实力提升工程”的机会,学院采购了一批NI的数 ...

  3. 使用LINQ的Skip和Take函数分批获取数据

    Skip函数和Take函数是System.Linq对类Enumberable的扩展, 其中Skip函数是跳过序列中的前n个数据,参数为需要跳过的数据量, Take函数是取序列中的n个数据,参数为要获取 ...

  4. CF1111E Tree 树链剖分,DP

    CF1111E Tree 过年了,洛咕还没爬这次的题,先放个CF的链接吧. 补个LG传送门. 对于每个询问点\(x\),设它的祖先即不能和它放在同一个集合中的点的个数为\(f[x]\),设\(dp[i ...

  5. cmp(x,y)

    cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1.

  6. Distributed3:SQL Server 分布式数据库性能测试

    我在三台安装SQL Server 2012的服务器上搭建分布式数据库,把产品环境中一年近1.4亿条数据大致均匀地存储在这三台服务器中,每台Server 存储4个月的数据,物理机的系统配置基本相同:内存 ...

  7. 腾讯云服务器linux Ubuntu操作系统搭建ftp服务器vsftpd

    腾讯云服务器linux Ubuntu操作系统安装ftp服务器vsftpd 操作系统: Ubuntu Server 16.04.1 LTS 64位 下面我将系统重装, 一步一步从头开始,安装FTP服务器 ...

  8. SpringBoot之MongoTemplate的查询可以怎么耍

    学习一个新的数据库,一般怎么下手呢?基本的CURD没跑了,当可以熟练的增.删.改.查一个数据库时,可以说对这个数据库算是入门了,如果需要更进一步的话,就需要了解下数据库的特性,比如索引.事物.锁.分布 ...

  9. 执行sh脚本报“/usr/bin/env: "sh\r": 没有那个文件或目录”错误

    出现这个错误的原因是出错的语句后面多了“\r”这个字符,换言之,脚本文件格式的问题,我们只需要把格式改成unix即可: vi xx.sh :set ff :set ff=unix :wq!

  10. Unity萌新日记—开发小技巧与冷知识(脚本篇)

    在学习unity的过程中,总会遇到很多零碎的知识点和小技巧,在此把它们记录下来,方便日后查看. 第一篇是关于脚本的一些你可能不知道的小知识. 还是个正在学习的萌新,如果写的不好,请谅解. Unity版 ...