1.什么是c#语言?
C#(读作“See Sharp”)是一种面向对象且类型安全的编程语言。 用 C# 可以开发出在 .NET 上运行的多种安全可靠的应用程序。 C# 源于 C 语言系列,C、C++、Java 和 JavaScript 程序员很快就可以上手使用。
2. .NET 体系结构
C# 程序在 运行在.NET 上,而 .NET 是名为公共语言运行时 (CLR) 的虚拟执行系统(VEM)和一组类库。 CLR 是 Microsoft 对公共语言基础结构 (CLI) 国际标准的实现。
用 C# 编写的源代码被编译成符合 CLI 规范的中间语言 (IL)。 IL 代码和资源(如位图和字符串)存储在扩展名通常为 .dll 的程序集中。 程序集包含一个介绍程序集的类型、版本和区域性的清单。
执行 C# 程序时,程序集将加载到 CLR。 CLR 会直接执行实时 (JIT) 编译,将 IL 代码转换成本机指令。 CLR 可提供其他与自动垃圾回收、异常处理和资源管理相关的服务。 由 CLR 执行的代码有时称为“托管代码”。 “非托管代码”编译为面向特定平台的本机语言。
C#版本 | .NET版本 | 发布日期 | 特性 |
---|---|---|---|
C# 1.0 | .NET Framework 1.0 | 2002-02-13 | 委托、事件 |
C# 1.1 | .NET Framework 1.1 | 2003-04-24 | APM(异步编程模型) |
C# 2.0 | .NET Framework 2.0 | 2005-11-07 | 泛型、匿名方法、迭代器、可空类型 |
C# 3.0 | .NET Framework 3.0 | 2007-11-06 | 隐式类型 |
.NET Framework 3.5 | 2007-11-19 | 对象集合初始化、自动实现属性、匿名类型、扩展方法、查询表达式、Lambda表达式、 表达式树、分部类和方法、Linq | |
C# 4.0 | .NET Framework 4.0 | 2010-04-12 | 动态绑定、命名和可选参数、泛型的协变和逆变、互操作性 |
C# 5.0 | .NET Framework 4.5 | 2012-08-15 | 异步和等待(async和await)、调用方信息(Caller Information) |
C# 6.0 | .NET Framework 4.6 | 2015-07-20 | 静态导入、C# 6 中的新增功能 |
.NET Core 1.0 | 2016-06-27 | ||
C# 7.0 | .NET Framework 4.6.2 | 2016-08-02 | 元组、C# 7.0 中的新增功能 |
C# 7.1 | .NET Framework 4.7 | 2017-04-05 | |
.NET Core 2.0 | 2016-08-14 | .NET Core 2.0 的新增功能 | |
C# 7.2 | .NET Framework 4.7.1 | 2017-10-17 | |
C# 7.3 | .NET Framework 4.7.2 | 2018-04-30 | |
.NET Core 2.1 | 2018-05-30 | .NET Core 2.1 的新增功能 | |
.NET Core 2.2 | 2018-12-04 | .NET Core 2.2 的新增功能 | |
C# 8.0 | .NET Framework 4.8 | 2019-04-18 | C# 8.0 中的新增功能 |
.NET Core 3.0 | 2019-09-23 | .NET Core 3.0 的新增功能 | |
.NET Core 3.1 | 2019-12-03 | .NET Core 3.1 的新增功能 | |
C# 9.0 | .NET 5 | 2020-09-04 | C# 9.0 中的新增功能 |
.NET 5 | 2020-10-13 | What's new in .NET 5 |
4.c#与c++的比较
项目 | c++ | c# |
编译目标 | 直接编译为本地代码 | 编译为中间语言(IL)执行时再通过JIT(Just-in-time)编译器将需要的模块编译为本地代码 |
内存管理 | 显示删除动态分配给堆的内存 | 垃圾回收机制在合适的时机回收不再使用的内存 |
指针 | 容易引起内存泄露 | 使用对类实例的引用,也可以在非类型安全状态下也可以使用指针。 |
字符串处理 | 字符串作为一种基本数据类型来对待,比c++对字符串的处理简单的多 | |
继承 | 允许类的多继承 | 只允许类的单继承,通过接口实现多继承 |
5.c#与java比较:
项目 | c# | Java |
运行环境 | 可在具有CLR的平台上运行 | 可在具有JVM的平台上运行 |
完全面向对象 | 是 | 是 |
多重继承 | 不支持 | 不支持 |
内存管理 | 使用垃圾回收机制 | 使用垃圾回收机制 |
异常处理 | try-catch-finally | try-catch-finally |
指针 | 只能在非托管代码段内使用 | 不支持 |
类型安全性验证 | 强制类型验证 | 强制类型验证 |
命名空间 | 支持 | 支持 |
布尔值 | 只能为true或false | 只能为true或false |
变量初始化 | 不能使用未初始化的变量 | 不能使用未初始化的变量 |
中间语言处理 | 将MSIL转换为JIT机器码 | Java字节码 |
访问修饰符 | public、protected、private、internal、partial | public、protected、private、friendly |
WebService | 支持 | 支持 |