1. C# 程序是一组类型声明
越是感觉简单的东西,简单的表述,就很难理解。
C#程序怎么去理解是一组类型声明呢?我们创建任何程序时,都是由变量,字段,方法组成。声明变量,声明方法,声明字段,就理解为一组类型的声明。
命名空间是一种将相关的类型声明分组并命名的方法
2. 类型是一种模板
C#中的数据类型,可看成是一个用来创建数据结构的模板。
模板详细的说了该构造对象的特征。
例如:
short-- 名称
2byte --存储数据成员的数据结构
16位整数 – 约束条件
3. 实例化类型
从某个类型模板创建实际的对象,称为实例化该对象。
short i=12;
上代码我就称为创建了short(短整型)的对象或者实例。
4. 数据成员和函数成员
数据成员:保存与这个类的对象或整个类相关的数据
函数成员:执行代码。函数成员定义类型的行为
5.预定义类型
C#提供了16种预定义类型(13种简单类型,3种非简单类型)
所有预定义类型的名称都由小写字母组成。
11种数值类型:
不同长度的有符号和无符号整数类型
浮点数据类型float和double
高精度小数类型decimal
字符类型char (Unicode)
布尔类型bool
3种非简单类型
String 一个Unicode字符数组
Object 所有类型的基类
Dynamic 使用动态语言编写的程序集时使用
6. 用户定义类型
6种类型可由用户自己创建
类类型class
结构类型struct
数组类型array
枚举类型enum
委托类型delegate
接口类型interface
7. 堆和栈
运行程序时,它的数据必须存储在内存中。运行中的程序使用2个内存区域来存储数据:栈和堆
栈:是一个内存数组,是一个LIFO(Last in First out 后进先出)的数据结构。
栈存储的几种数据类型:
某些类型变量的值
程序当前的执行环境
传递给方法的参数
栈:
数据只能从栈的顶端插入和删除
把数据放到栈顶称为入栈push
从栈顶删除数据称为出栈pop
堆是一块内存区域,在堆里可以分配大块的内存用于存储某种类型的数据对象。
堆里的内存能够任意顺序存入和移除。
CLR的自动垃圾收集器自动清除无主的堆对象。
8.值类型和引用类型
数据项的类型定义了存储数据所需要的内存大小以及该类型的数据成员。
类型还决定了对象在内存中的存储位置—栈和堆。
值类型:只需要一段单独的内存,用于存放实际的数据
引用类型:需要2段内存,第一段内存存储实际的数据,它总是位于堆中,第二段是一个引用类型,指向数据堆中的存放位置。
存储引用类型对象成员
引用类型对象的数据部分始终存放在堆里
值类型对象,或引用类型数据的引用部分可以存放在堆里,也可存放在栈里,依赖实际环境。
9.变量
变量是一个名称,表示程序执行时存储在内存中的数据。
变量声明
变量在使用前必须声明,变量声明定义了变量,完成了2件事:
给变量命名,并为它关联一种类型。
让编译器为它分配一块内存。
Intx=2;
变量初始化,由一个等号后跟一个初始值组成。
自动初始化
多变量的声明
多变量声明中的变量必须类型相同
变量名直接必须逗号分隔,可在变量名后包含初始化语句
例如:
int x = 7, y, z = 9;
Console.WriteLine($“x= {x},z={z}”);
变量x, y, z都是同一类型,逗号分割,可声明时同时初始化值。
使用变量的值
变量名代表变量保存的值,可以通过使用变量名来使用值
Console.WriteLine($“x= {x},z={z}”); 使用变量的值
输出:x= 7,z=9
10. 静态类下和dynamic关键字
变量类型在编译确定并且不能再运行时修改,这称作静态类型。
C#语言设计者增加了dynamic关键字,代表一个特定的C#类型,它知道如何在运行时解析自身。编译时,编译器不会对dynamic类型的变量做类型检查。
11.可空类型
可空类型允许创建标记为无效或者无效的值类型变量,普通的值类型为非可空类型。
后续有单独的章节讲述可空类型和使用。
|