介绍
- 面向对象的语言,而且进一步支持面向组件的编程
- 垃圾回收:自动回收未使用的对象占用的内存
- 异常处理:提供一种结构化的可拓展的方法用于错误检测恢复
- 类型安全设计:不可能从未初始化的变量中进行读取、将数组索引在其边界之外、执行未检查的类型转换
- 统一类型系统,所有类型继承object
- 版本控制:当引入新版依赖的时候,用这些语言编写的程序会出现不必要的中断现象,C#控制版本的方面Virtual和override修饰符,方法重载决策的规则以及对显式接口成员声明的支持
程序结构
关键组织结构概念包含程序、命名空间、类型、成员、程序集。C#程序一个或者多个源文件组成。程序声明类型,类型包含成员,并整理到命名空间。类型示例包含类型和接口。成员示例包含字段、方法、属性和事件。程序集通常具有文件拓展名.exe或者.dll具体取决它们是否实现应用程序或者库,不含Main入口的代码一般会被编译.exe文件
类型和变量
类型:
- 值类型:值类型的变量直接包含数据
- 简单类型
- 枚举类型
- 结构类型
- 可以为null的类型
- 引用类型:包含对数据的引用,两个对象可以引用同一个对象
- 类类型
- 接口类型
- 数组类型
- 委托类型
类型 | 说明 | |
---|---|---|
值类型 | 简单类型 | 有符号的整数:sbyte、short、int、long |
无符号类型:byte、ushort、uint、ulong | ||
UniCode字符:char | ||
IEEE浮点:float、double | ||
高精度小数:decimal | ||
布尔:bool | ||
枚举类型 | 格式 enum E{…}的用户定义类型 | |
结构类型 | 格式 stuct S{…}的用户定义类型 | |
可以为null的类型 | 值为null的其他所有值类型的拓展 | |
引用类型 | 类类型 | 其他所有类型的最终基类:object |
uniCode字符串:string | ||
格式为 class C{…}的用户定义类型 | ||
接口类型 | 格式为 interface I {…}的用户定义类型 | |
数组类型 | 一维数组和二维数组 | |
委托类型 | 格式为的用户定义的类型,例如delegate int D(…) |
C#创建新类型
C#程序使用类型声明创建新的类型,类型声明指定新的类型名称和成员。
五种类别
- 类类型:包含数据成员(字段)和函数成员(方法、属性)的数据结构,类类型支持单一的继承和多形形,即派生类可以拓展和专门针对基类的机制
- 结构类型:类似与类类型,表示包含数据成员和函数成员的结构,但是与类不同结构是值类型,不需要进行堆分配。结构类型不支持用户指定的继承,并且所有结构类都隐式继承object
- 接口类型:将协定定义为公告函数成员的命名集,实现接口的类或者结构必须提供接口的函数成员的实现,接口可以从多个基接口继承,类或者结构可以实现多个接口
- 枚举类型
- 委托类型:具有已命名常数的不同类型,每个枚举类型都有一个基础的类型,改类型必须是八个整数类型之一。枚举类型的值集与基础类型的值集相同
C#支持数组,int【】代表一维数组,int【,】代表二位数组
可以为bull的类型无需声明即可使用,对于每个不可以为null T 的值类型,都有T?一个对应的可以为 null 的null类型,该类型可以保存附加值。 例如, int?是一个可以容纳任何32位整数或值null的类型。
类型系统是统一的,值类型的值通过执行装箱和取消装箱操作被视为对象,
using System;
class Test
{
static void Main() {
int i = 123;
object o = i; // Boxing
int j = (int)o; // Unboxing
}
}
当值类型的值转换为类型object时,将分配的一个对象实例(也称为Box)来保存值,并将改值赋值到该对象,相反,将object引用强制转换为值类型,会检测所引用的对象是否为正确的值类型的对象,检测成功,则将对象中的值赋值出来
类和对象
类时最基本的C#类型,类时一种数据结构,可以将一个对象的状态(字段)和操作(方法和其他函数成员结合起来)类为动态创建的类示例提供定义,类支持继承和多形性,即派生类可以拓展和专门针对基类的机制
成员
类的成员为静态成员或者示例成员,静态成员属于类,实例成员属于对象(类的实例)
成员 | 说明 |
---|---|
常量 | 与类相关联的常量值 |
字段 | 类的常量 |
方法 | 类可以执行的计算和操作 |
属性 | 与将和写入类的已命名属性相关的操作 |
索引器 | 将与读取类实例编入索引(像处理数组一样)像关联的操作 |
事件 | 类可以生成的通知 |
运算符 | 类支持的转换和表达式的运算符 |
构造函数 | 初始化类实例或者类本身所需的操作 |
类型 | 类声明的嵌套类型 |