1.C#是什么
C#是微软公司开发的一种面向对象、面向组件且类型安全的高级程序设计语言,它运行于.NET Framework和.NET Core平台。它是.Net框架重要组成部分,用于编写.Net应用程序。
C#(发音“C sharp”)是微软.NET的首席架构师安德尔斯·海尔斯伯格(Anders Hejlsberg)倾尽心血的精品之作。
C#源于C和C++语言,它既参考了Java的单继承特性和语法,又借鉴了Delphi与COM(组件对象模型)是直接集成的特点,已经学会C、C++、Java 和 JavaScript 程序员可以很快上手C#。
2..NET体系结构
.NET是一个开发平台,具有用于构建Web、移动、桌面、游戏、物联网、云和微服务等应用程序的工具和库。
起初.Net技术体系只有.NET Framework,虽然.net可以支持多语言,但是.NET Framework只能局限于在windows平台上使用,不能跨平台。这个缺点让.net体系逐步落后于主流技术的发展潮流。
后来为了实现跨平台,微软重写了CLR,开发了.NEF Core。.NEF Core支持Windows、Linux、macOS上开发ASP.NET和控制台应用,可以实现在云计算下的服务器端跨平台开发。
Xamarin专注于为Andorid、iOS等主流移动平台提供基于Mono实现的.NET开发解决方案,以及开发工具和类库。
2.1 .NET Framework
.NET Framework:.NET框架是一个支持跨语言的开发和执行环境,它可以让开发人员快速创建Web应用程序、Web服务和Window桌面程序。
下面汇总了.NET框架版本:
框架版本 | 发行日期 | 最后支持时间 |
April 12, 2010 | January 12, 2016 | |
August 15, 2012 | January 12, 2016 | |
October 17, 2013 | January 12, 2016 | |
November 18, 2008 | October 10, 2028 | |
May 05, 2014 | April 26, 2022 | |
July 20, 2015 | April 26, 2022 | |
November 30, 2015 | April 26, 2022 | |
August 02, 2016 | ||
April 05, 2017 | ||
October 17, 2017 | ||
April 30, 2018 | ||
April 18, 2019 | ||
September 14, 2021(持续更新) | ||
September 14, 2021(持续更新) |
2.2 .NET Core
.NET Core:.NET Core是一个支持Windows、Linux 和 macOS开发Web和控制台程序的跨平台软件框架。它具有免费和开源托管的特点,是微软在未来重点发展的开源软件平台。
下面汇总了.NET Core版本:
.Net Core版本
版本 | 发行日期 | 最后支持时间 |
May 14, 2019 | June 27, 2019 | |
May 14, 2019 | June 27, 2019 | |
July 10, 2018 | October 01, 2018 | |
August 19, 2021 | August 21, 2021 | |
November 19, 2019 | December 23, 2019 | |
February 18, 2020 | March 03, 2020 | |
September 14, 2021 | December 03, 2022 | |
September 14, 2021(持续更新) | ||
September 14, 2021(持续更新) |
2.3 XAMARIN
Xamarin基于Mono实现为移动平台提供.NET开发解决方案,适用于iOS、Android、Universal Windows Platform、Watch OS、tvOS和Mac App平台。
3.类型和变量
分类
C#的变量可以分为值类型和引用类型,值类型可以划分简单类型、枚举类型和结构类型;而
引用类型包括类类型、接口类型、数组类型和委托类型。
值类型和引用类型的区别:
值类型和引用类型最重要的区别是内存分配空间的操作。值类型的变量直接存储到内存的Stack栈中,由系统自动释放资源,效率比较高。引用类型初始化后会被分配到GC Heap托管堆上,托管堆上分配操作是由GC来管理。
4.版本特色
(1)C# 1.0 特性
- 面向对象特性,支持类类型
- 结构
- 接口
- 事件
- 属性,类的成员
- 委托,一种引用类型,表示对具有特定参数列表和返回类型的方法的引用
- 表达式、语句、操作符
- 特性,为程序代码添加元数据或声明性信息,运行时,通过反射可以访问特性信息
- 字面值,区别常量,常量是和变量相对的
(2)C# 2.0 特性
- 泛型
- 部分类型
- 匿名方法
- 迭代器
- 可空类型
- Getter / setter单独可访问性
- 方法组转换(代表)
- 委托、接口的协变和逆变
- 静态类
- 委托推断,允许将方法名直接赋给委托变量
(3)C# 3.0 特性
- 隐式类型局部变量
- 对象和收集初始化器
- 自动实现的属性
- 匿名类型
- 扩展方法
- 查询表达式
- Lambda表达式
- 表达树
- 部分方法
(4)C# 4.0 特性
- 动态绑定
- 命名和可选参数
- 泛型的协变和逆变
- 嵌入式互操作类型
(5)C# 5.0 特性
- 异步方法
- 调用方信息特性,调用时访问调用者的信息
(6)C# 6.0 特性
- Compiler-as-a-service(Roslyn)
- 将静态类型成员导入命名空间
- 异常过滤器
- 在Catch和Finally中使用Await
- 自动属性初始化器
- 只读属性的默认值
- Expression-bodied 函数成员
- 空条件运算符,简洁检查
- 字符串插值
- nameof 表达式
- 字典初始化器
(7)C# 7.0 特性
- out变量
- 模式匹配
- 元组
- 解构
- 局部函数
- 数字分隔符
- 二进制文字
- 局部引用和引用返回
- 扩展异步返回类型
- 表达式的构造函数和finalizers
- 通用的异步返回类型
- throw表达式
(8)C# 7.1 特性
- 在main方法用async方式
- 引入新的字面值default
- Reference assemblies
- 推断元组元素名称
- 泛型的类型参数模式匹配
(9)C# 7.2 特性
- 编写安全高效代码的技巧
- 非尾随命名参数
- 数值文字中的前导下划线
- private protected 访问修饰符
- 条件 ref 表达式
(10)C# 7.3 特性
- 无需固定即可访问固定的字段。
- 可以重新分配 ref 本地变量。
- 可以使用 stackalloc 数组上的初始值设定项。
- 可以对支持模式的任何类型使用 fixed 语句。
- 可以使用其他泛型约束
- 可以使用元组类型测试 == 和 !=。
- 可以在多个位置使用表达式变量。
- 可以将属性附加到自动实现的属性的支持字段。
- 由 in 区分的参数的方法解析得到了改进。
- 重载解析的多义情况现在变得更少。
(11)C# 8.0 特性
- Readonly 成员
- 默认接口成员
- 模式匹配增强功能:Using 声明
- Switch 表达式
- 属性模式
- 元组模式
- 位置模式
- 静态本地函数
- 可处置的 ref 结构
- 可为空引用类型
- 异步流
- 索引和范围
(12)C# 9.0 特性
- 记录
- 仅限 Init 的资源库
- 顶级语句
- 模式匹配增强功能
- 本机大小的整数
- 函数指针
- 禁止发出 localsinit 标志
- 目标类型的新表达式
- 静态匿名函数
- 目标类型的条件表达式
- 协变返回类型
- 扩展 GetEnumerator 支持 foreach 循环
- Lambda 弃元参数
- 本地函数的属性
- 模块初始值设定项
- 分部方法的新功能