参考文档:C# 教程 - 概述 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/
C#语言介绍
(1)C#是面向对象面向组件的语言,需要定义类型及其行为。
(2)垃圾回收
(3)可为null的类型
(4)异常处理
(5)Lambda表达式
(6)语言集成查询(LINQ)
(7)异步操作
(8)有统一类型系统
(9)支持用户自定义的引用类型和值类型
(10)C#允许动态分配轻型结构的对象和内嵌存储
(11)C#支持泛型方法和类型
(12)C#可提供迭代器
.NET体系结构
Hello world
类型和变量
类型定义C#中的任何数据的结构和行为。
类型的声明可以包含其成员、基类型、它实现的接口和该类型允许的操作。
变量是用于引用特定类型的实例的标签。
C#有两种类型:值类型和引用类型。
值类型的变量直接包含他们的数据。
引用类型的变量存储对数据(称为“对象”)的引用。
对于引用类型,两个变量可以引用同一个对象;对于变量执行的运算可能会影响另一个变量引用的对象。
借助值类型,每个变量都有自己的数据副本;因此,对一个变量执行的运算不会影响另一个变量(ref和out参数变量除外)。
标识符是变量名称。标识符是不包含任何空格的unicode字符序列。
如果标识符的前缀为@,则该标识符可以是C#保留字。在与其他语言交互时,使用保留字作为标识符很有用。
C#的值类型进一步分为:简单类型、枚举类型、结构类型、可以为null的值类型和元组值类型。
C#引用类型又细分为类类型、接口类型、数组类型和委托类型。
C#类型系统
值类型
简单类型
有符号整形:sbyte short int long
无符号整形:byte ushort uint ulong
Unicode字符:char,表示UTF-16代码单元
IEEE二进制浮点:float double
高精度十进制浮点数:decimal
布尔值:bool,表示布尔值(trur或false)
枚举类型
enum E {...}
结构类型
struct S {...}
可以为null的值类型
元组值类型
(T1,T2,...)
引用类型
类类型
其他所有类型的最终基类:object
Unicode字符串:string,表示UTF-16代码单元序列
class C {...}
接口类型
interface I {...}
数组类型
一维、多维、交错。
委托类型
delegate int D(...)
C#程序使用类型声明创建新类型。
类型声明指定新类型的名称和成员。
用户可以定义一下六种C#类型:类类型、结构类型、接口类型、枚举类型、委托类型和元组值类型。
还可以声明record类型(record struct或record class)。
记录类型具有编译器合成成员。
记录主要用于存储值,关联行为最少。
class类型定义包含数据成员(字段)和函数成员(方法、属性及其他)的数据结构。
类类型支持单一继承和多形性,即派生类可以扩展和专门针对基类的机制。
struct类型定义包含数据成员和函数成员的结构,这一点与类类型相似。
不过,与类不同的是,结构是值类型,通常不需要堆分配。
结构类型不支持用户指定的继承,并且所有结构类型均隐式继承自类型object。
interface类型将协定定义为一组已命名的公共成员。
实现interface的class或struct必须提供接口成员的实现代码。
interface可以继承自多个基接口,class和struct可以实现多个接口。
delegate类型表示引用包含特定参数列表和返回类型的方法。
通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。
委托类同于函数式语言提供的函数类型。
它们还类似于其他一些语言中存在的“函数指针”概念。
与函数指针不同,委托是面向对象且类型安全的
class、struct、interface和delegate类型全部都支持泛型,因此可以使用其他类型对它们进行参数化。
C#支持任意类型的一维和多维数组
与上述类型不同,数组类型无需先声明即可使用。
相反,数组类型是通过在类型名称后面添加方括号而造成的。
可以为null的类型不需要单独定义。
对于所有不可以为null的类型T,都有对应的可以为null的类型T?,后者可以包含附加值null。
C#采用统一的类型系统,因此任意类型的值都可视为object。
每种C#类型都直接或间接地派生自object类类型,而object是所有类型的最终基类。
只需将值视为类型object,即可将引用类型的值视为对象。
通过执行装箱和取消装箱操作,可以将值类型的值视为对象。
将值类型的值分配给object对象引用时,会分配一个“箱”来保存此值。
该箱是引用类型的实例。此值会被复制到该箱。
C#的统一类型实际上意味着“按需”将值类型视为object引用。
鉴于这种统一性,使用类型object的常规用途库可以与派生自object的所有类型结合使用,包括引用类型和值类型。
C#有多种变量,其中包括字段、数组元素、局部变量和参数。
变量表示存储位置。
每个变量都具有一种类型,用于确定可以在变量中存储哪些值。
程序结构
C#中的关键组织结构概念包括程序、命名空间、类型、成员和程序集。
程序声明类型,而类型则包含成员,并被整理到命名空间中。
类型示例包括类、结构和接口。
成员示例包括字段、方法、属性和事件。
编译完的C#程序实际上会打包到程序集中。
程序集的文件扩展名通常.exe或.dll,具体视其分别实现的是应用程序还是库而定。