- A+
一 C#程序是一组类型声明
C#程序或DLL的源代码是一组一种或多种类型声明。
对于可执行程序,类型声明中必须有一个包含Main方法的类。
命名空间是一种把相关的类型声明分组并命名的方法。是类在程序集中逻辑上的分组。
二 Main:程序的起始点
每个C#可执行程序必须带有Main方法。
每个C#程序的可执行起始点在Main中的第一条指令。
static void Main() { 语句 . . . }
三 C#类型
3.1 类型是一种模板,是一种活动的数据结构
类型是一个用来创建数据结构的模板。类描述了其代表的该类数据结构的特征。
类是一个能存储数据并执行代码的数据结构,包含数据成员和函数成员。
数据成员:存储与类或类的实例相关的数据。数据成员通常模拟该类所表示的现实事物的特性;
函数成员:它执行代码,通常会模拟类所表示的显示事物的功能和操作。
3.2 C#预定义类型
C#提供了16种预定义类型,包括13种简单类型和13种非简单类型;
13种简单类型包括:
- 11种数值类型:不同长度的有符号和无符号整数;浮点数类型float和double,decimal;
- 一种unicode字符类型char;
- 一种布尔类型bool;
3种非简单类型包括:
- string:一个unicode字符数组
- object:所有其他类型的基类
- dynamic: 使用动态语言编写程序集时使用
3.3 用户定义类型
- 类 class
- 结构 struct
- 数组 array
- 枚举 enum
- 委托 delegate
- 接口 interface
3.4 实例化类型,创建对象
从某个类型创建实际的对象,称为实例化该对象
四 栈stack和堆heap
程序运行时,它数据必须存储在内存中。一个数据项需要多大的内存,存储在何处及如何存储都取决于该数据项的类型。
运行中的程序使用两个区域来存储数据:栈和堆。
4.1 栈stack
栈是一个内存数组,是一个(Last-In First-out)后进先出的数据结构。
系统管理所有的栈操作。
栈存储几种类型的数据:
- 某些类型变量的值;
- 程序当前的执行环境;
- 传递给方法的参数。
栈的特征:
- 数据只能从栈的顶端插入或删除;
- 把数据放到栈顶称为入栈(push);
- 从栈顶删除数据成为出栈(pop);
4.2 堆heap
堆是一块内存区域,在堆里可以分配大块的内存用于存储某类型的数据对象。
堆里的内存可以以任意顺序存入和移除。
虽然程序可以在堆里保存数据,但并不能显示地删除他们。CLR的GC(Grabage Collector)在判断出程序的代码将不会再访问某数据项时,自动清除无主的堆对象。
五 值类型和引用类型
类型决定了对象在内存中的存储位置--栈或堆。
按照类型的对象在内存中存储方式的不同,类被分为值类型和引用类型:
- 值类型只需要一段单独的内存,用于存储实际的数据;
- 引用类型需要两段内存,第一段存储实际的数据,位于堆中,第二段是一个引用,指向数据在堆中的存放位置。
5.1 存储引用类型对象的成员
引用类型对象的数据部分始终存放在堆里。
值类型对象或引用类型数据的引用部分可以存放在堆里,也可以存放在栈里,取决于实际环境。