关于C#与.NET Framework
前几天,有一个做测试的问我.NET Framework是什么,和C#是什么关系呢。
下面我就来解释一下.NET Framework是什么:.NET Framework是一个框架,是应用程序运行时所需要的执行环境,它为应用程序的执行提供有几种服务:
(1)全面的类库:提供了丰富的类库供程序员使用,使程序员的开发更具效率。
(2)内存管理:在其他编程语言中,有许多是需要程序员来负责内存的分配和释放以及管理对象生命周期。在.NET Framework的框架下, 程序员可以不必担心内存的问题(当然,这不是绝对的),因为它提供了优质的内存管理服务。
(3)通用类型系统(Common Type System,CTS):其定义了可以在中间语言(IL,接下来会解释)中使用的预定义数据类型。
(4)开发结构和技术:.NET Framework提供了开发特定程序所需要的库,比如WPF,WCF,ASP.NET等。
(5)语言的互操作性:在.NET Framework上的语言编译器都提供了生成中间语言(IL,至于什么是IL,下一篇解释)的机制,这种机制使得不同的语言可以互相操作。
以上的这些只是一个简单的概念,下面就来看一下.NET Framework由什么组成:
.NET Framework主要有两个部分组成:一是公共语言运行时(Common Language Runtime,CLR);二是.NET Framework类库(Framework Class Library,FCL)。
1、公共语言运行时(CLR)
它是.NET Framework的核心基础。我觉得可以把它看成是一个容器,在这个容器里面,它提供了内存管理,线程管理,异常处理,检查类型安全等服务。放在里面执行的代码叫做托管代码(managed code),没有放在里面执行的代码成为非托管代码(unmanaged code)。一般C#所写出来的代码都是托管代码。
CLR包含两个组成部分:通用类型系统(Common Type System,CTS,上文有提及)和公共语言规范(Common Language Specification,CLS)。
- CTS:C#和VB.NET是两种还有比较使用的语言,它们都是由CLR进行管理的,但是它们在语法和数据类型方面都是不一样的,CLR是怎样进行托管呢?CTS就是用来解决这个问题的,它解决了不同语言之间数据类型不同的问题,for example:C#中定义整型用int,而VB用的是Integer,很明显的不一样,通过CTS可以把这两个类型变成通用的Int32。所有的.NET Framework都共享这一类型系统,从而使它们可以实现无缝互操作。
- CLS:刚才说到了CTS解决了数据类型的不一样,那CLS就是用来解决语法规范上的区别。CLS是一种最低的语言标准,它指定了以.NET平台为目标的语言所必须支持的最小特征,以及某一语言与其他.NET语言之间实现互操作所需要的完备特征。认识到这点很重要,这里讨论的特征问题已不仅仅是语言间的简单语法区别。例如,CLS并不去关心一种语言用什么关键字实现继承,只是关心该语言如何支持继承。CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如VB.NET)设计的.NET组件实现互操作。
2、.NET Framework类库(FCL)
它是一组DLL程序集的集合,包含了大量定义好的类型以及功能。程序员可以利用这些功能,快速的进行出多种应用程序,比如WPF,Windows Form和ASP.NET应用程序。
下图很好的解释了.NET Framework的情况:红色框框内的东西就是.NET Framework的组成部分。
那接下来就来说说第二个问题,C#与.NET Framework的关系是什么呢?
其实上面的那个图片应该也解释得清楚了,C#是面向.NET Framework开发的语言。除了C#之外,VB.NET和F#也都是一样的。
打个比较经典的比喻吧:.NET Framework相当于是一艘航空母舰,在这艘舰艇上面可以搭载很多种型号的飞机,比如歼11(C#),海直八(VB.NET),空警200(F#)等。都可以在.NET Framework这艘航空母舰上运行。
下面介绍C#版本与.NET Framework之间的版本关系
C#版本 |
.NET Framework版本 |
Visual Studio版本 |
发布日期 |
特性 |
C# 1.0 |
.NET Framework 1.0 |
Visual Studio .NET 2002 |
2002.1 |
委托事件 |
C# 1.1 |
.NET Framework 1.1 |
Visual Studio .NET 2003 |
2003.4 |
APM(异步编程模型) |
C# 2.0 |
.NET Framework 2.0 |
Visual Studio 2005 |
2005.11 |
泛型 匿名方法 迭代器可空类型 |
C# 3.0 |
.NET Framework 3.0 .NET Framework 3.5 |
Visual Studio 2008 |
2007.11 |
隐式类型的局部变量 对象集合初始化 自动实现属性 匿名类型 扩展方法 查询表达式 Lambda表达式 表达式树 分部类和分部方法 LINQ |
C# 4.0 |
.NET Framework 4.0 |
Visual Studio 2010 |
2010.4 |
动态绑定 命名和可选参数 泛型的协变和逆变 互操作性 |
C# 5.0 |
.NET Framework 4.5 |
Visual Studio 2012 |
2012.8 |
异步和等待调用方信息 |
关于C#与.NET Framework的更多相关文章
- windows类书的学习心得
原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- Entity Framework Core 1.1 升级通告
原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...
- 在传统.NET Framework 上运行ASP.NET Core项目
新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...
- 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)
前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...
- 来,给Entity Framework热热身
先来看一下Entity Framework缓慢的初始化速度给我们更新程序带来的一种痛苦. 我们手动更新程序时通常的操作步骤如下: 1)把Web服务器从负载均衡中摘下来 2)更新程序 3)预热(发出一个 ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- Entity Framework教程(第二版)
源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...
- Entity Framework 6 Recipes 2nd Edition 译 -> 目录 -持续更新
因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...
随机推荐
- [FJSC2014]折线统计
[题目描述] 二维平面上有n 个点(xi, yi),现在这些点中取若干点构成一个集合S,对它们按照x 坐标排序,顺次连接,将会构成一些连续上升.下降的折线,设其数量为f(S).如下图中,1->2 ...
- 介绍4款json的java类库 及 其性能测试
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...
- nginx -- nginx平台初探(100%)
初探nginx架构(100%) 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢?这一节我们先来初识一下nginx框架吧. nginx在启动后,在un ...
- lightoj 1032 二进制的dp
题目链接:http://lightoj.com/volume_showproblem.php?problem=1032 #include <cstdio> #include <cst ...
- 12个强大的Web服务测试工具
在过去的几年中,web服务或API的普及和使用有所增加. web服务或API是程序或软件组件的集合,可以帮助应用程序进行交互或通过形成其他应用程序或服务器之间的连接执行一些进程/事务处理.基本上有两种 ...
- Hadoop Hive概念学习系列之什么是Hive?(一)
参考 <Hadoop大数据分析与挖掘实战>的在线电子书阅读 http://yuedu.baidu.com/ebook/d128cf8e33687e21 ...
- OpenCV 中 IplImage、CvMat、Mat中的type是怎么回事?
在使用opencv的过程中,无论使用原始的IplImage和CvMat类型,还是用最新C++版本的Mat类型,在创建和使用过程中,经常会遇到CV_8UC1.CV_8UC3.CV_32FC3等声明,我以 ...
- java 启用新线程异步调用
2秒后执行 某段代码: demo如下: System.out.println("正常执行...111"); Thread t = new Thread(){ public void ...
- Away3D ATFTexture
之前在项目中贴图大量使用了 PNG 和 jpg 遇到了个问题.在使用BitmapTexture的时候发现 是必须MIP 不管你 是否开启或者关闭 MIP 他都会去创建.而每次MIP都会根据贴图大小去生 ...
- vs 点击就设置项目为默认启动项
装好系统没注意 做项目的时候解决方案比较多 发现点击哪个项目哪个项目就成了默认启动项目 这个开始没觉出来 最后发现挺烦人的 想想难道是我装vs装的么 我于是卸载了全新安装了 还是一个吊样 无意间试了下 ...