继续复习。
C#可以使用三种内存:堆栈(栈)stack、托管堆(堆)managed heap和非托管堆 unmanaged heap
堆栈(栈):性能高,不灵活,只能分配固定大小的数据类型。
托管堆(堆):可分配任意大小的数据,程序员只负责分配内存。.net框架的垃圾回收器负责其自动回收释放。灵活但效率稍低。
非托管堆:不受.net框架控制,是windows 管理的内存,在C#中只能使用不安全的指针访问。
变量
变量用于在内存中存储特定值,并且这个值是可以变化的
变量有名称、数据类型、值三要素。
变量名是在程序源代码里的标识,类型确定它所代表的内存大小和类型(堆和栈),值代表它在内存块中的数据。
变量在使用前必须先定义(声明和赋值)
//语法1 数据类型 变量名 int iMyAge;//声明整型变量 iMyAge=1;//给变量赋初值 //语法2 数据类型 变量名=值 int iMyAge=1;//初始化变量 //你可以一次声明多个变量,它们都是相同类型;也可以一次声明多个变量,并赋值 int iFirstVar,iSecondVar; int iFirstVar=1,iSecondVar=2;
使用变量时,可以直接使用名称,但是未赋值的变量不能使用,否则会造成编译错误
变量的作用域
每个语句块内都可以声明变量,这些变量叫语句块的局部变量。
局部变量的作用域是指:声明变量的语句块内,位于声明变量之后的区域(包括嵌套在内的所有语句块)
在一个语句块内定义了一个变量,那么在它的作用域内都不能定义同名的变量,否则会出现编译错误。
在C#中没有全局变量。
常量
常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型。
常量可以被当作常规的变量,只是他们的值在定义后不能被修改。
数据类型
C#完全支持.net框架通用类型系统(CTS)定义的类型,所有类型都是用类定义的。
C#中既可以使用通用类型系统定义的类型,也可以使用自定义类型,所有的类型都是从System.Object派生出来的。
C#语言的类型分为两大类:值类型和引用类型。
值类型有简单类型、枚举类型、结构类型
引用类型有类类型、数组类型、接口类型、委托类型
值类型和引用类型的区别:
1.它们存储的位置不一样。2.如果是引用类型,当两个对象指向同一个地方,修改某一个的时候,其他对象的值会发生改变。
枚举类型
枚举是一组命名整形常量,枚举类型是用enum关键字声明的
C#枚举是值类型数据。换句话说,枚举包含自己的值,且不能继承或传递继承。
声明枚举的一般语法:
enum <enum_name>{ enumeration list } //这里enum_name是枚举的类型名称 //enumeration list 是一个用逗号分隔的标识符列表 //枚举列表中的每一个符号代表一个整数值,一个比前的符号大的整数值,默认情况下第一个枚举符号的值是0 enum Days{Sun,Mon,tue,Wed,thu}; //但是你也可以自己定义每个符号的值 enum Days{Sun=77,Mon=11,tue=22,Wed=33,thu==55};
类型转换
类型转换从根本上来说是类型铸造,或者说是把数据从一种类型转换为另一种类型。
在C#中类型铸造就两种方式:
隐式类型转换-这种转换是C#默认的以安全方式进行转换,不会导致数据丢失。例如从小的整数类型转换为大的整数类型,从派生类型转换为基类。
显示类型转换-显示类型转换,即强制类型转换。显示类型转换需要强制转换运算符,而且强制转换会造成数据丢失。
double d = 5673.74; int i; // 强制转换 double 为 int i = (int)d;