390 likes | 606 Views
第 2 章 基本数据类型. 2.1 一个简单的程序 2.2 基本数据类型 2.3 变量与常量 2.4 基本运算 2.5 数组的定义和使用. 2.3 变量与常量. 2.3.1 标识符与命名规则 2.3.2 变量 2.3.3 常量 2.3.4 类型转换 2.3.5 装箱与拆箱. 2.3 变量与常量. 2.3.1 标识符与命名规则. 在 C# 中所有的名称都必须先声明后使用,包括变量名、常量名、方法名、类名、对象名等等 , 这些名称统称为 标识符 满足下列条件的字符串称为 标识符 :
E N D
第2章 基本数据类型 2.1 一个简单的程序 2.2 基本数据类型 2.3 变量与常量 2.4 基本运算 2.5 数组的定义和使用
2.3 变量与常量 2.3.1 标识符与命名规则 2.3.2 变量 2.3.3 常量 2.3.4 类型转换 2.3.5 装箱与拆箱
2.3 变量与常量 2.3.1 标识符与命名规则 • 在C#中所有的名称都必须先声明后使用,包括变量名、常量名、方法名、类名、对象名等等, 这些名称统称为标识符 • 满足下列条件的字符串称为标识符: (1)由字母(包括大小写字母、汉字)、数字和下划线组成; (2)以字母或下划线开头。
2.3 变量与常量 以数字1开头 包括了字母、数字和下划线以外的字符# 包括了字母、数字和下划线以外的字符(空格) 2.3.1 标识符与命名规则(续) 合法的标识符: _name c_sharp var1 var2 var2var1 非法的标识符: 1var c_# var2 var1
2.3 变量与常量 2.3.1 标识符与命名规则(续) • 标识符可以分为: • 用户标识符:由用户根据需要自己定义的标识 符(以上介绍的都是用户标识符) • 系统标识符:为系统保留的,只有系统才可以使 用的标识符
2.3 变量与常量 2.3.1 标识符与命名规则(续) 如果要定义与关键字重名的标识符,则必须在关键字前加上字符@: @new @if @for 而下面的用户标识符是非法的: new if for ——合法性(正确性)是标识符的最基本要 求,必须满足 ——标识符的见名知义是提高程序的可读性的 基本途径 ——注意:如果定义的标识符并非与关键字重名,而又在其前面加上字符@,则也是非法的。
2.3 变量与常量 2.3.1 标识符与命名规则(续) • 除了遵守标识符的命名原则以外,为了提高代码可读性,一般会使用一个命名约定来规范标识符的使用 • 无规则的命名将会使编程和以后的维护工作称为一场噩梦 • 不同的组织和机构可能有自己的命名约定。 • 为了让标识符可读,会遇到一个标识符使用了多个单词的情况。 • 根据标识符的用途,有两种常用的命名约定: • Pascal风格和Camel风格
下表汇总了.NET FrameWork中标识符的大小写规则,并提供了不同类型标识符的示例。
2.3 变量与常量 2.3.2 变量 1. 声明变量 2. 变量赋值
1. 声明变量 • 变量是在程序运行过程中,其值可以改变的数据 • 在C#中,命名变量的过程叫声明,且规定,变量必须先声明后使用 • 声明变量就是把存放数据的类型告诉程序,以便为变量安排内存空间 • 声明变量最简单的格式为: 数据类型名称 变量名列表; • 例如: int number; // 声明一个整型变量 float x; // 声明一个单精度浮点型变量 bool open; // 声明一个布尔型变量
声明变量 • 可以一次声明多个变量 • 例如: sbyte a , b; // 声明两个有符号字节型变量 • 如果一次声明多个变量,变量名之间用逗号分隔
2. 变量赋值 • C#规定,变量必须赋值后才能引用,为变量赋值需使用赋值号“=” • 例如: int number; number = 32; // 为变量赋值32 bool open; open = true; // 为变量赋值true
变量赋值 • 可以使用变量为变量赋值,例如: bool close; close = open; // 为变量赋值open(true) • 可以为几个变量一同赋值,例如: int a , b , c; a = b = c = 32; • 可以在声明变量的同时为变量赋值,相当于将声明语句与赋值语句合二为一,例如: double area , radius = 16;
2.3 变量与常量 2.3.3 常量 • 常量是在程序运行过程中,其值保持不变的量 • 常量有字面常量和符号常量两种 1. 字面常量 2. 符号常量
1. 字面常量 • 字面常量即数据值本身 (1) 整型常量 (2) 实型常量 (3) 字符常量 (4) 字符串常量 (5) 布尔常量
(1) 整型常量 • 整型常量即整数 • 整型常量有三种形式 • 十进制形式 • 即通常意义上的整数,如123、48910等 • 八进制形式 • 需要在数字前面加“0”,如0123、037等 • 十六进制形式 • 需要在数字前面加“0x”或“0X”,如0x123、0X48910等 • 如果想使整型常量为长整型(long)常量,可以在数字后跟“l”或“L”
(2) 实型常量 • 实型常量即带小数的数值 • 实型常量有两种表示形式 • 小数形式 • 即人们通常的书写形式,如0.123、12.3、.123等 • 指数形式 • 也叫科学记数,由底数加E或e加指数组 成,例如123e5或123E5都表示123×105
实型常量 • 实型常量默认为双精度型(double) • 实型常量可以显式指出是单精度型(float),还是双精度型(double),或者是十进制型(decimal) • 如123.5f或123.5F为单精度型, • 123.5d或123.5D为双精度型, • 123.5m或123.5M为十进制型
(3) 字符常量 • 字符常量表示单个的Unicode字符集中的一个字符,通常包括数字、各种字母、标点、符号和汉字等 • 字符常量用一对英文单引号界定 • 如'A'、'a'、'+'、'汉'等
转义符 • 在C#中,有些字符不能直接放在单引号中作为字符常量,这时需要使用转义符来表示这些字符常量,转义符由反斜杠“\”加字符组成
(4) 字符串常量 • 字符串常量是由一对双引号界定的字符序列 • 例如:"欢迎使用C#!","I am a student.“ • 由双引号界定的一个字符,是字符串常量,不是字符常量 • 例如,'A'与"A",前者是字符常量,后者是字符串常量 • 如果试图将一个字符串常量赋值给一个字符变量,系统在编译代码时将报错 • 例如,char ca = “A”; //无法将string类型隐式转换为char
(4) 字符串常量(续) 一些特殊情况下,在字符串中会包含一些反斜杠(如:文件路径经常有反斜杠),为了避免编译器把反斜杠后带的字符当作转义字符处理,可以在字符串前面加上“@”字符。 例如,字符串“D:\Documents\Myfile.txt”可以如下赋值: string filePath= “D:\\Documents\\Myfile.txt” 或者string filePath= @“D:\Documents\Myfile.txt”
(5) 布尔常量 • 布尔常量即布尔值本身 • 布尔值true(真)和false(假)是C#的两个关键字
2. 符号常量 • 符号常量使用const关键字定义 • 常量定义格式为: const 类型标识符 符号常量名 = 常量表达式; • “常量表达式”不能包含变量及函数等值会发生变化的内容,但可以包含其他已定义常量 • 例如: const int max = 10; // 合法 const double PI = 3.1415926; // 合法 const double maxArea = PI * max * max; // 合法,表达式包含已定义常量 int num = 10; const double maxArea = PI * num * num; // 不合法,表达式包含变量
2. 符号常量(续) • 由于符号常量代表的是一个不变的值,所以符号常量不能出现在赋值号的左边 • 如果在程序中非常频繁地使用某一常量,可以将其定义为符号常量 • 定义符号常量的好处在于: • 提高代码输入效率 • 减少输入错误 • 常量名一旦输入错误,在程序运行前的编译阶段即可检查出来
2.3 变量与常量 2.3.4 类型转换 • 数据类型的转换有隐式转换与显式转换两种 1. 隐式转换 2. 显式转换 3. 数值类型和字符串类型数据之间的转换
1. 隐式转换 • 隐式转换是系统自动执行的数据类型转换 • 隐式转换的基本原则 • 允许数值范围小的类型向数值范围大的类型转换 • 允许无符号整数类型向有符号整数类型转换 • 例如: int x = 123456; long y = x; // 整型数隐式转换为长整型数 uint a = 123456; long b = a; // 无符号整型数隐式转换为有符号的长整型数
1. 隐式转换(续) • C#允许将char(字符)类型的数据隐式转换为数值范围大于短整型(含)的数值类型 • 例如: char letter = ‘A’; int num = 32 + letter; // 字符型变量letter的值隐式转换为整数65,与32相加 • 之所以允许将字符型数据隐式转换为整数,是因为char类型的数据在内存中实质是保存为整型数据,当然从意义上代表的是Unicode字符集中的一个字符
2. 显式转换 • 显式转换也叫强制转换,是在代码中明确指示将某一类型的数据转换为另一种类型 • 显式转换的一般格式为: (数据类型名称) 数据 • 例如: int x = 600; short z = (short) x; // 将整型变量x的值显式转换为short类型
2. 显式转换(续) • 显式转换中可能导致数据的丢失 • 例如: decimal d = 234.55M; // 使用M或m类型符说明类型,否则编译出错 int x = (int) d; // 将十进制型变量d的值显式转换为整型,小数部分被截去,x = 234
3.数值类型和字符串类型数据之间的转换 • C#提供了专门的类方法用于数值类型和字符串类型数据之间的转换 (1) Parse方法 (2) ToString方法
(1) Parse方法 • Parse方法可以将特定格式的字符串转换为对应类型的数值 • Parse方法的使用格式为: 数值类型名称.Parse(字符串型表达式) • 其中,“字符串型表达式”的值必须严格符合“数值类型名称”对数值格式的要求 • 例如: int x = int.Parse("123"); // 符合整型格式要求,转换成功 int y = int.Parse("123.0");// 不符合整型格式要求,转换失败
(2) ToString方法 • ToString方法可将其他数据类型的变量值转换为字符串类型 • ToString方法的使用格式为: 变量名称.ToString( ) • 例如: int x = 123; string s = x.ToString( ); // 将整型变量x的值转换为字符串“123”
2.3 变量与常量 2.3.5 装箱与拆箱 • 装箱就是将数值类型隐式转换为引用类型(类、接口、委托、数组)的过程,而拆箱则是将引用类型显式转换为数值类型。 • 例如: int n = 100; object obj = n; //装箱 int m = (int)obj; //拆箱
关于值类型与引用类型 • 从变量的存储方式看,C#中的变量可以分为值类型变量与引用类型变量 1. 值类型 2. 引用类型
1. 值类型 • 值类型变量直接包含其本身的数据,因此每个值类型变量本身就包含有赋给它的值 • 在C#中,内置数据类型除了字符串(string)类型与对象(object)类型外,其余均为值类型
2. 引用类型 • 与值类型不同,引用类型变量本身不包含数据,只是存储对数据的引用,数据保存在内存的其他位置 • 值类型与引用类型变量都可以使用变量来赋值 • 两者用变量赋值的性质不同: • 对于值类型变量赋值,赋的是变量的值 • 对于引用类型变量的赋值,赋的是变量的引用
例如: int x = 42, y = x; String t1 = newString(“Hello!”); String t2 = t1; // 使用对象变量赋值 • 用变量“x”为变量“y”赋值,是将“x”所在内存中的值复制给了“y” • 而用变量“t1”为“t2”赋值,则是将“t1”对数据的引用复制给了“t2”,即两个对象变量使用的是同一内存中的数据,也就是说,用“t1”为“t2”赋值不需要使用new关键字对对象初始化,也就没有为对象“t2”分配存储数据的内存空间