C#图解教程第一章 C#和.NET框架
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框架的更多相关文章
- C# 图解教程 第一章 C#和.NET框架
C#和.NET框架 在.NET之前.NET时代 .NET框架的组成大大改进的编程环境 编译成CIL编译成本机代码并执行CLR Common Language RuntimeCLI Common Lan ...
- 村田噪声抑制基础教程-第一章 需要EMI静噪滤波器的原因
1-1. 简介 EMI静噪滤波器 (EMIFIL®) 是为电子设备提供电磁噪声抑制的电子元件,配合屏蔽罩和其他保护装置一起使用.这种滤波器仅从通过连线传导的电流中提取并移除引起电磁噪声的元件.第1章说 ...
- [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍
注:为了看上去比较清晰这里只转载了中文 原地址: [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍 本章将引导您完成安装和设置开发环境,然后你就可 ...
- javascript进阶教程第一章案例实战
javascript进阶教程第一章案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过练习积累JS的使用技巧 二.实例 练习1:删除确认提示框 实例描述: 防止用户小心单击了“删除”按钮,在用 ...
- [ABP教程]第一章 创建服务端
Web应用程序开发教程 - 第一章: 创建服务端 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以下技术开发 ...
- 《进击吧!Blazor!》系列入门教程 第一章 8.部署
<进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门教程视频,此教程能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...
- 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述
微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...
- OpenGL完全教程 第一章 初始化OpenGL
第一章 初始化OpenGL 无论是什么东西,要使用它,就必须对它进行初始化.如果你之前使用过GDI,你应该也多多少少了解到GDI在绘制图形之前要为之创建渲染环境.OpenGL也一样.本章给出的代码,大 ...
- python 教程 第一章、 简介
第一章. 简介 官方介绍: Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使 ...
随机推荐
- codeforces 630C - Lucky Numbers 递推思路
630C - Lucky Numbers 题目大意: 给定数字位数,且这个数字只能由7和8组成,问有多少种组合的可能性 思路: 假设为1位,只有7和8:两位的时候,除了77,78,87,88之外还哇哦 ...
- HDU3792---Twin Prime Conjecture(树状数组)
Twin Prime Conjecture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- CSS架构的优选和解决方案
背景 上周我厂前端小伙伴们开了一个技术交流会,关于如何优选CSS架构.解决掉平时写CSS时频繁出现的各种问题,这是前端人员老生常谈的问题,但却很少搬上台面,铺开正式地开交流会.这次会议,便是围绕CSS ...
- C#自定义ip控件
前言:由于项目中有ip输入,但C#中又没有IP控件,如果直接放4个TextBox感觉又怎么好,还不好控制,于是可以通过自定义控件的方式来解决,就又了下面的自定义ip控件,该控件功能基本完善,如果还有未 ...
- 你不得不了解的应用容器引擎---Docker
最近突然想搭一个redis集群玩玩,因为公司的电脑同时开2个虚拟机就卡的不行,所以我就想到用Docker开启多个redis-server来搭建.然后在网上找着找着发现,使用Docker,哪需要搭建啊, ...
- TensorBoard 使用和问题解决
TensorBoard 使用和问题解决 一.启动TensorBoard 1) python tensorflow/tensorboard/tensorboard.py --logdir=path/to ...
- C#中级-从零打造基于Socket在线升级模块
一.前言 前段时间一直在折腾基于Socket的产品在线升级模块.之前我曾写过基于.Net Remoting的.基于WCF的在线升级功能,由于并发量较小及当时代码经验的不足一直没有实际应用. ...
- Spring Boot系列(一) Spring Boot介绍和基础POM文件
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- RandomAccessFile详解
此类的实例支持对随机访问文件的读取和写入.随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组.存在指向该隐含数组的光标或索引,称为文件指针:输入操作从文件指针开始读取字节,并随着对字节的 ...
- Python笔记·第二章—— Python的编码问题(一)
一.什么是编码 可以说,计算机是一个即聪明又笨蛋的家伙.说它聪明,是因为他可以做很多事情,它的强大无需多说,大家应该都有所了解以及感受.但是为什么说它又是个笨蛋呢,因为我们在电脑上写出的每一个字,保存 ...