C#入门系列(一)——C#简介
C#入门系列目录
C# 是一个简单的、现代的、通用的、面向对象的编程语言,C#入门系列旨在向C#初学者介绍C#编程基础,学完此系列内容可编写简单的C#程序。下面就开始吧。
C#,读作"see sharp",别再读作"C井(jing)"了,是Anders Hejlsberg (安德斯·海尔斯伯格)主持开发由微软在2002年推出基于.NET框架的,面向对象的,类型安全的高级开发语言。
C#命名启发于音乐上的音名“C♯”,在音乐中“C♯”表示C升半音,是比C高一点的音节,且“#”形似4个加号,微软借助这样的命名,意在表示C#在一些语言特性方面对C++的提升的意思。由于显示器(标准字体、浏览器等)的技术限制,且大部分的键盘布局上不存在升记号(♯),所以(#)被用于此编程语言的名称中。
C#设计目标
1.C#旨在设计成为一种“简单、现代、通用”,以及面向对象的程序设计语言
2.此种语言的实现,应提供对于以下软件工程要素的支持:强类型检查、数组维度检查、未初始化的变量引用检测、自动垃圾收集(Garbage Collection,指一种存储器自动释放技术)。
软件必须做到强大、持久,并具有较强的编程生产力。
3.此种语言为在分布式环境中的开发提供适用的组件开发应用。
4.为使程序员容易迁移到这种语言,源代码的可移植性十分重要,尤其是对于那些已熟悉C和C++的程序员而言。
5.对国际化的支持非常重要。
6.C#适合为独立和嵌入式的系统编写程序,从使用复杂操作系统的大型系统到特定应用的小型系统均适用。
7.虽然C#程序在存储和操作能力需求方面具备经济性,但此种语言在某些情况下并不能在性能和程序大小方面与C语言相抗衡。
C#发展历史
C# 1.0 版
和 Visual Studio .NET 2002 一起发布的 C# 版本 1.0 非常像 Java。它旨在成为一种“简单、现代、面向对象的常规用途语言”。与现在的 C# 相比,C# 1.0 版少了很多功能。你会发现自己的代码很冗长。不过凡事总要有个开始。在 Windows 平台上,C# 1.0 版是 Java 的一个可行的替代之选。
C# 1.0 的主要功能包括:
-
类
-
结构
-
接口
-
事件
-
属性
-
委托
-
表达式
-
语句
-
特性
C# 1.2 版
随 Visual Studio .NET 2003 一起提供的 C# 版本 1.2。它对语言做了一些小改进。最值得注意的是,从此版本开始,当 IEnumerator 实现 IDisposable 时,foreach 循环中生成的代码会在 IEnumerator 上调用 Dispose。
C# 2.0 版
从此以后事情变得有趣起来。让我们看看 C# 2.0(2005 年发布)和 Visual Studio 2005 中的一些主要功能:
-
泛型
-
分部类型
-
匿名方法
-
可以为 null 的值类型
-
迭代器
-
协变和逆变
除现有功能以外的其他 C# 2.0 功能:
-
getter/setter 单独可访问性
-
方法组转换(委托)
-
静态类
-
委托推断
C# 一开始是面向对象的 (OO) 通用语言,而 C# 2.0 版很快改变了这一点。做好基础准备后,他们开始追求解决一些严重影响开发者的难点。且他们以显著的方式追求这些难点。
通过泛型,类型和方法可以操作任意类型,同时保持类型安全性。例如,通过 List<T>,将获得 List<string> 或 List<int> 并且可以对这些字符串或整数执行类型安全操作,同时对其进行循环访问。使用泛型优于创建派生自 ArrayList 的 ListInt 或者从每个操作的 Object 强制转换。
C# 2.0 版引入了迭代器。简单来说,迭代器允许使用 foreach 循环来检查 List(或其他可枚举类型)中的所有项。拥有迭代器是该语言最重要的一部分,显著提升了语言的可读性以及人们推出代码的能力。
C# 3.0版
C# 3.0 版和 Visual Studio 2008 一起发布于 2007 年下半年,但完整的语言功能是在 .NET Framework 3.5 版中发布的。此版本标示着 C# 发展过程中的重大更改。C# 成为了真正强大的编程语言。我们来看看此版本中的一些主要功能:
-
自动实现的属性
-
匿名类型
-
查询表达式
-
Lambda 表达式
-
表达式树
-
扩展方法
-
隐式类型本地变量
-
分部方法
-
对象和集合初始值设定项
回顾过去,这些功能中大多数似乎都是不可或缺,难以分割的。它们的组合都是经过巧妙布局。我们通常认为 C# 版本的杀手锏是查询表达式,也就是语言集成查询 (LINQ)。
LINQ 的构造可以建立在更细微的视图检查表达式树、Lambda 表达式以及匿名类型的基础上。不过无论如何 C# 3.0 都提出了革命性的概念。C# 3.0 开始为 C# 转变为面向对象/函数式混合语言打下基础。
具体来说,你现在可以编写 SQL 样式的声明性查询对集合以及其他项目执行操作。无需再编写 for 循环来计算整数列表的平均值,现在可改用简单的 list.Average() 方法。组合使用查询表达式和扩展方法让各种数字变得智能多了。
C# 4.0
C# 版本 4.0 随 Visual Studio 2010 一起发布,引入了一些有趣的新功能:
-
动态绑定
-
命名参数/可选参数
-
泛型协变和逆变
-
嵌入的互操作类型
嵌入的互操作类型缓和了部署难点。泛型协变和逆变提供了更强的功能来使用泛型,但风格比较偏学术,应该最受框架和库创建者的喜爱。命名参数和可选参数帮助消除了很多方法重载,让使用更方便。但是这些功能都没有完全改变模式。
主要功能是引入 dynamic 关键字。在 C# 4.0 版中引入 dynamic 关键字让用户可以替代编译时类型上的编译器。通过使用 dynamic 关键字,可以创建和动态类型语言(例如 JavaScript)类似的构造。可以创建 dynamic x = "a string" 再向它添加六个,然后让运行时理清下一步操作。
动态绑定存在出错的可能性,不过同时也为开发人员提供了强大的语言功能。
C# 5.0版
C# 版本 5.0 随 Visual Studio 2012 一起发布,是该语言有针对性的一个版本。对此版本中所做的几乎所有工作都归入另一个突破性语言概念:适用于异步编程的 async 和 await 模型。下面是主要功能列表:
-
异步成员
-
调用方信息特性
调用方信息特性让你可以轻松检索上下文的信息,不需要采用大量样本反射代码。这在诊断和日志记录任务中也很有用。
但是 async 和 await 才是此版本真正的主角。C# 在 2012 年推出这些功能时,将异步引入语言作为最重要的组成部分,另现状大为改观。如果你以前处理过冗长的运行操作以及实现回调的 Web,应该会爱上这项语言功能。
C# 6.0版
版本 6.0 随 Visual Studio 2015 一起发布,通过该版本,它不再推出主导性的杀手锏,而是发布了很多使得 C# 编程更有效率的小功能。以下介绍了部分功能:
-
静态导入
-
异常筛选器
-
自动属性初始化表达式
-
Expression bodied 成员
-
Null 传播器
-
字符串内插
-
nameof 运算符
-
索引初始值设定项
其他新功能包括:
-
Catch/Finally 块中的 Await
-
仅限 getter 属性的默认值
这些功能每一个都很有趣。但从整体来看,可以发现一个有趣的模式。在此版本中,C# 消除语言样本,让代码更简洁且更具可读性。所以对喜欢简洁代码的用户来说,此语言版本非常成功。
除了发布此版本,他们还做了另一件事,虽然这件事本身与传统的语言功能无关。他们发布了 Roslyn 编译器即服务。C# 编译器现在是用 C# 编写的,你可以使用编译器作为编程工作的一部分。
C# 7.0版
随 Visual Studio 2017 一起发布的 C# 版本 7.0 是最新的主版本。虽然该版本继承和发展了 C# 6.0,但不包含编译器即服务。以下介绍了部分新增功能:
-
Out 变量
-
元组和析构函数
-
模式匹配
-
本地函数
-
已扩展 expression bodied 成员
-
Ref 局部变量和返回结果
其他功能包括:
-
弃元
-
二进制文本和数字分隔符
-
引发表达式
这些都为开发者提供了很棒的新功能,帮助编写比以往任何时候都简洁的代码。重点是缩减了使用 out 关键字的变量声明,并通过元组实现了多个返回值。
C# 8.0版
C# 8.0 向 C# 语言添加了以下功能和增强功能:
-
Readonly 成员
-
默认接口方法
-
模式匹配增强功能:
-
Switch 表达式
-
属性模式
-
元组模式
-
位置模式
-
Using 声明
-
静态本地函数
-
可处置的 ref 结构
-
可为空引用类型
-
异步流
-
索引和范围
-
Null 合并赋值
-
非托管构造类型
-
嵌套表达式中的 Stackalloc
-
内插逐字字符串的增强功能
C#版本 |
日期 |
.NET框架的版本 |
Visual Studio版本 |
C# 1.0 |
2002年1月 |
.NET Framework 1.0 |
Visual Studio 2002 |
C# 1.1 C# 1.2 |
2003年4月 |
.NET Framework 1.1 |
Visual Studio 2003 |
C# 2.0 |
2005年12月 |
.NET Framework 2.0 |
Visual Studio 2005 |
C# 3.0 |
2007年11月 |
.NET Framework 3.5 |
Visual Studio 2008 |
C# 4.0 |
2010年4月 |
.NET Framework 4 |
Visual Studio 2010 |
C# 5.0 |
2012年8月 |
.NET Framework 4.5 |
Visual Studio 2012 |
C# 6.0 |
2015年7月 |
.NET Framework 4.6 |
Visual Studio 2015 |
C# 7.0 |
2017年3月 |
.NET Framework 4.6.2 |
Visual Studio 2017 |
C# 7.1 |
2017年8月 |
.NET Framework 4.7 |
Visual Studio 2017 Version 15.3 |
C# 7.2 |
2017年11月 |
.NET Framework 4.7.1 |
Visual Studio 2017 Version 15.5 |
C# 7.3 |
2018年5月 |
.NET Framework 4.7.2 |
Visual Studio 2017 Version 15.7 |
C# 8.0 |
2019年4月 |
.NET Framework 4.8 |
Visual Studio 2019 |
.NET Framework自2002年推出至今,框架日益臃肿庞大,而且局限于Windows平台。在2017年,微软不再完全把控操作系统领域。为了破局,微软不得不重新架构使其可跨平台,.NET Core横空出世。.NET Core是一个可以用来构建现代、可伸缩和高性能的跨平台软件应用程序的通用开发框架。可用于为Windows、Linux和MacOS构建软件应用程序。.Net Core将在后续的专题中介绍。
C#是开发.NET Core程序的不二选择,C#和.NET有强大生态系统。C#、.NET和IDE可更好地受到第三方类库和工具的支持,所有这些都将帮助您更好地构建应用。
无论你是一个毕业生,希望吸引未来的雇主,或者你是想要重新更新技能的雇员, 都应该学习.NET和C#,让你在未来10年都有足够的技能来满足行业需求。
欢迎关注我的微信公众号“CSharp开发”
“点赞❤️+赞赏👍是最大的鼓励!”