第 2 章 基本数据类型

39
应应应应应应C# 2 应 应应应应应应 2 2 第 第第第第第第 第 第第第第第第 2.1 第第第第第第 2.2 第第第第第第 2.3 第第第第第 2.4 第第第第 2.5 第第第第第第第第

description

第 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# 中所有的名称都必须先声明后使用,包括变量名、常量名、方法名、类名、对象名等等 , 这些名称统称为 标识符 满足下列条件的字符串称为 标识符 : - PowerPoint PPT Presentation

Transcript of 第 2 章 基本数据类型

Page 1: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

第第 22 章 基本数据类型章 基本数据类型

2.1 一个简单的程序

2.2 基本数据类型

2.3 变量与常量

2.4 基本运算

2.5 数组的定义和使用

Page 2: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

2.3 2.3 变量与常量变量与常量

2.3.1 标识符与命名规则

2.3.2 变量

2.3.3 常量

2.3.4 类型转换

2.3.5 装箱与拆箱

Page 3: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

在 C# 中所有的名称都必须先声明后使用,包括变量名、常量名、方法名、类名、对象名等等 , 这些名称统称为标识符

满足下列条件的字符串称为标识符:

( 1 )由字母(包括大小写字母、汉字)、数字和下划线组成;

( 2 )以字母或下划线开头。

2.3.1 标识符与命名规则2.3 变量与常量

Page 4: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

2.3.1 标识符与命名规则(续)2.3 变量与常量

合法的标识符:_namec_sharpvar1var2var2var1非法的标识符:1var c_# var2 var1

以数字 1 开头 包括了字母、数字和下划线以外的字符# 包括了字母、数字和下划线以外的字符(空

格)

Page 5: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

标识符可以分为:

用户标识符:由用户根据需要自己定义的标识 符(以上介绍的都是用户标识符)

系统标识符:为系统保留的,只有系统才可以使 用的标识符

2.3.1 标识符与命名规则(续)2.3 变量与常量

Page 6: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

如果要定义与关键字重名的标识符,则必须在关键字前加上字符 @ :@new@if@for

而下面的用户标识符是非法的:newiffor—— 注意:如果定义的标识符并非与关键字重名,而又在其前面加上字符 @ ,则也是非法的。

—— 合法性(正确性)是标识符的最基本要 求,必须满足

—— 标识符的见名知义是提高程序的可读性的 基本途径

2.3.1 标识符与命名规则(续)2.3 变量与常量

Page 7: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

除了遵守标识符的命名原则以外,为了提高代码可读性,一般会使用一个命名约定来规范标识符的使用

无规则的命名将会使编程和以后的维护工作称为一场噩梦

不同的组织和机构可能有自己的命名约定。

为了让标识符可读,会遇到一个标识符使用了多个单词的情况。

根据标识符的用途,有两种常用的命名约定:

–Pascal 风格和 Camel 风格

2.3.1 标识符与命名规则(续)2.3 变量与常量

Page 8: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

PascalPascal 风格和风格和 CamelCamel 风格的命名约定风格的命名约定

Page 9: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

下表汇总了 .NET FrameWork 中标识符的大小写规则,并提供了不同类型标识符的示例。

标识符 大小写方式 示例

类 Pascal AppDomain

枚举类型 Pascal ErrorLevel

枚举值 Pascal FatalError

事件 Pascal ValueChanged

异常类 Pascal WebException

只读的静态字段 Pascal RedValue

接口 Pascal IDisposable

方法 Pascal ToString

命名空间 Pascal System.Drawing

参数 Camel typeName

属性 Pascal BackColor

Page 10: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

1. 声明变量

2. 变量赋值

2.3.2 变量

2.3 变量与常量

Page 11: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

1. 1. 声明变量声明变量

变量是在程序运行过程中,其值可以改变的数据在 C# 中,命名变量的过程叫声明,且规定,变量必须先声明后使用声明变量就是把存放数据的类型告诉程序,以便为变量安排内存空间声明变量最简单的格式为:

数据类型名称 变量名列表 ;例如:

int number; // 声明一个整型变量float x; // 声明一个单精度浮点型变量bool open; // 声明一个布尔型变量

Page 12: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

声明变量声明变量

可以一次声明多个变量

例如:

sbyte a , b; // 声明两个有符号字节型变量

如果一次声明多个变量,变量名之间用逗号分隔

Page 13: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

2. 2. 变量赋值变量赋值

C# 规定,变量必须赋值后才能引用,为变量赋值需使用赋值号“ =”

例如:

int number;number = 32; // 为变量赋值 32bool open;open = true; // 为变量赋值 true

Page 14: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

变量赋值变量赋值

可以使用变量为变量赋值,例如:bool close;

close = open; // 为变量赋值 open( true )

可以为几个变量一同赋值,例如:int a , b , c;

a = b = c = 32;

可以在声明变量的同时为变量赋值,相当于将声明语句与赋值语句合二为一,例如:

double area , radius = 16;

Page 15: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

常量是在程序运行过程中,其值保持不变的量

常量有字面常量和符号常量两种

1. 字面常量

2. 符号常量

2.3.3 常量

2.3 变量与常量

Page 16: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

1. 1. 字面常量字面常量

字面常量即数据值本身

(1) 整型常量

(2) 实型常量

(3) 字符常量

(4) 字符串常量

(5) 布尔常量

Page 17: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

(1) (1) 整型常量整型常量

整型常量即整数整型常量有三种形式

十进制形式即通常意义上的整数,如 123、 48910 等

八进制形式需要在数字前面加“ 0” ,如 0123、 037 等

十六进制形式需要在数字前面加“ 0x” 或“ 0X” ,如 0x123、 0X48910 等

如果想使整型常量为长整型( long )常量,可以在数字后跟“ l” 或“ L”

Page 18: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

(2) (2) 实型常量实型常量

实型常量即带小数的数值

实型常量有两种表示形式

小数形式

即人们通常的书写形式,如 0.123、 12.3、 .123 等

指数形式

也叫科学记数,由底数加 E或 e 加指数组 成,例如 123e5或123E5 都表示 123×105

Page 19: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

实型常量实型常量

实型常量默认为双精度型( double )

实型常量可以显式指出是单精度型( float ),还是双精度型( double ),或者是十进制型( decimal )

如 123.5f或 123.5F 为单精度型,

123.5d或 123.5D 为双精度型,

123.5m或 123.5M 为十进制型

Page 20: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

(3) (3) 字符常量字符常量

字符常量表示单个的 Unicode 字符集中的一个字符,通常包括数字、各种字母、标点、符号和汉字等

字符常量用一对英文单引号界定

如 'A'、 'a'、 '+'、 '汉 ' 等

Page 21: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

转义符转义符

在 C# 中,有些字符不能直接放在单引号中作为字符常量,这时需要使用转义符来表示这些字符常量,转义符由反斜杠“ \” 加字符组成

字符形式 字符意义\’ 单引号(’)\” 双引号(”)\\ 反斜杠( \)\0 空字符(NULL)\n 换行符( LF)\r 回车符( CR)\t 水平制表符( TAB)

Page 22: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

(4) (4) 字符串常量字符串常量

字符串常量是由一对双引号界定的字符序列例如: "欢迎使用 C#!", "I am a student.“

由双引号界定的一个字符,是字符串常量,不是字符常量例如, 'A'与 "A" ,前者是字符常量,后者是字符串常量

如果试图将一个字符串常量赋值给一个字符变量,系统在编译代码时将报错

例如, char ca = “A”; // 无法将 string 类型隐式转换为 char

Page 23: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

(4) (4) 字符串常量(续)字符串常量(续)

一些特殊情况下,在字符串中会包含一些反斜杠(如:文件路径经常有反斜杠),为了避免编译器把反斜杠后带的字符当作转义字符处理,可以在字符串前面加上“ @” 字符。

例如,字符串“ D:\Documents\Myfile.txt” 可以如下赋值:string filePath= “ D:\\Documents\\Myfile.txt”

或者 string filePath= @“D:\Documents\Myfile.txt”

Page 24: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

(5) (5) 布尔常量布尔常量

布尔常量即布尔值本身

布尔值 true (真)和 false (假)是 C# 的两个关键字

Page 25: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

2. 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;

// 不合法,表达式包含变量

Page 26: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

2. 2. 符号常量(续)符号常量(续)

由于符号常量代表的是一个不变的值,所以符号常量不能出现在赋值号的左边

如果在程序中非常频繁地使用某一常量,可以将其定义为符号常量

定义符号常量的好处在于:提高代码输入效率减少输入错误常量名一旦输入错误,在程序运行前的编译阶段即可检查出来

Page 27: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

数据类型的转换有隐式转换与显式转换两种

1. 隐式转换

2. 显式转换

3. 数值类型和字符串类型数据之间的转换

2.3.4 类型转换

2.3 变量与常量

Page 28: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

1. 1. 隐式转换隐式转换

隐式转换是系统自动执行的数据类型转换隐式转换的基本原则允许数值范围小的类型向数值范围大的类型转换允许无符号整数类型向有符号整数类型转换例如:

int x = 123456;long y = x; // 整型数隐式转换为长整型数uint a = 123456;long b = a; // 无符号整型数隐式转换为有符号的长整型数

Page 29: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

1. 1. 隐式转换(续)隐式转换(续)

C#允许将 char (字符)类型的数据隐式转换为数值范围大于短整型(含)的数值类型

例如:

char letter = ‘A’;

int num = 32 + letter;

// 字符型变量 letter 的值隐式转换为整数 65 ,与 32 相加

之所以允许将字符型数据隐式转换为整数,是因为 char 类型的数据在内存中实质是保存为整型数据,当然从意义上代表的是 Unicode 字符集中的一个字符

Page 30: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

2. 2. 显式转换显式转换

显式转换也叫强制转换,是在代码中明确指示将某一类型的数据转换为另一种类型

显式转换的一般格式为:

( 数据类型名称 ) 数据

例如:

int x = 600;

short z = (short) x;

// 将整型变量 x 的值显式转换为 short 类型

Page 31: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

2. 2. 显式转换(续)显式转换(续)

显式转换中可能导致数据的丢失

例如:

decimal d = 234.55M;

// 使用 M或m 类型符说明类型,否则编译出错

int x = (int) d;

// 将十进制型变量 d 的值显式转换为整型,小数部分被截去, x = 234

Page 32: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

3.3. 数值类型和字符串类型数据之间的转换数值类型和字符串类型数据之间的转换

C# 提供了专门的类方法用于数值类型和字符串类型数据之间的转换

(1) Parse 方法

(2) ToString 方法

Page 33: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

(1) (1) ParseParse 方法方法

Parse 方法可以将特定格式的字符串转换为对应类型的数值

Parse 方法的使用格式为:

数值类型名称 .Parse( 字符串型表达式 )

其中,“字符串型表达式”的值必须严格符合“数值类型名称”对数值格式的要求

例如:

int x = int.Parse("123"); // 符合整型格式要求,转换成功

int y = int.Parse("123.0");// 不符合整型格式要求,转换失败

Page 34: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

(2) (2) ToStringToString 方法方法

ToString 方法可将其他数据类型的变量值转换为字符串类型

ToString 方法的使用格式为:

变量名称 .ToString( )

例如:

int x = 123;

string s = x.ToString( ); // 将整型变量 x 的值转换为字符串“ 123”

Page 35: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

装箱就是将数值类型隐式转换为引用类型(类、接口、委托、数组)的过程,而拆箱则是将引用类型显式转换为数值类型。

例如:

int n = 100;

object obj = n; // 装箱

int m = (int)obj;// 拆箱

2.3.5 装箱与拆箱

2.3 变量与常量

Page 36: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

关于值类型与引用类型关于值类型与引用类型

从变量的存储方式看, C# 中的变量可以分为值类型变量与引用类型变量

1. 值类型

2. 引用类型

Page 37: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

1. 1. 值类型值类型

值类型变量直接包含其本身的数据,因此每个值类型变量本身就包含有赋给它的值

在 C# 中,内置数据类型除了字符串( string )类型与对象( object )类型外,其余均为值类型

Page 38: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

2. 2. 引用类型引用类型

与值类型不同,引用类型变量本身不包含数据,只是存储对数据的引用,数据保存在内存的其他位置

值类型与引用类型变量都可以使用变量来赋值两者用变量赋值的性质不同 :对于值类型变量赋值,赋的是变量的值对于引用类型变量的赋值,赋的是变量的引用

Page 39: 第 2 章 基本数据类型

应用软件开发( C# ) 第 2 章 基本数据类型

例如:int x = 42, y = x;

String t1 = new String(“Hello!” );

String t2 = t1; // 使用对象变量赋值

用变量“ x” 为变量“ y” 赋值,是将“ x” 所在内存中的值复制给了“ y”

而用变量“ t1” 为“ t2” 赋值,则是将“ t1” 对数据的引用复制给了“ t2” ,即两个对象变量使用的是同一内存中的数据,也就是说,用“ t1” 为“ t2”赋值不需要使用 new 关键字对对象初始化,也就没有为对象“ t2” 分配存储数据的内存空间