面向对象课件第4章 变量.docx

上传人:b****9 文档编号:25993876 上传时间:2023-06-17 格式:DOCX 页数:15 大小:28.38KB
下载 相关 举报
面向对象课件第4章 变量.docx_第1页
第1页 / 共15页
面向对象课件第4章 变量.docx_第2页
第2页 / 共15页
面向对象课件第4章 变量.docx_第3页
第3页 / 共15页
面向对象课件第4章 变量.docx_第4页
第4页 / 共15页
面向对象课件第4章 变量.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

面向对象课件第4章 变量.docx

《面向对象课件第4章 变量.docx》由会员分享,可在线阅读,更多相关《面向对象课件第4章 变量.docx(15页珍藏版)》请在冰豆网上搜索。

面向对象课件第4章 变量.docx

面向对象课件第4章变量

第4章变量、常量及数据类型

4.1变量

变量在计算机中对应的就是一个能够存储数据的内存地址,里面存放了程序运行时的各种数据,里面的数据是可以变化的。

打个比方,变量就相当于一个个空的盒子,每个盒子都有一个标签以之对应,这个标签就是变量名,程序运行时只要找到了标签就找到了盒子,也就找到了存放在盒子里面的数据。

4.1.1给变量命名

给变量命名就是给计算机的内存盒子贴上标签,在贴标签的过程中要符合一定的规则,只有符合这些规则的标签才能作为变量名。

1、变量名必须满足的条件

●只能为字母(包括大小写)、数字、@符号以及下划线_。

●数字不能放在首位,但下划线可以。

●字符“@”只能放在首位,不能放在任何其他位置。

同时,C#是一种大小写敏感的语言,也就意味着同样的字符串,只要大小写不同也是两个不同的变量名。

2、不能定义为变量名的字符串

在C#语言中有一些字符串已经被系统使用,这些保留的字符串就叫做关键字,它们是不能用做变量名的。

C#中一共有77个关键字,这些关键字虽然不能用做变量名,但是若前面加上前导字符@也可以做为变量名使用,但是我们不推荐这样做。

 

表4-1C#关键字列表

abstract

as

base

bool

break

byte

case

catch

char

checked

class

const

continue

decimal

default

delegete

do

double

else

enum

event

explicit

extern

false

finally

fixed

float

for

foreach

goto

if

implicit

in

in

int

interface

internal

is

lock

long

namespace

new

null

object

operator

out

out

override

params

private

protected

public

readonly

ref

return

sbyte

sealed

short

sizeof

stackalloc

static

string

struct

switch

this

throw

TRUE

try

typeof

uint

ulong

unchecked

unsafe

ushort

using

vitual

void

volatitle

while

4.1.2声明变量

1.单变量的声明方法

单变量的声明遵照以下的语法格式:

数据类型变量名;

例如:

intnumber;

该语句定义了一个数据类型为整形的单变量,该变量的名字叫做number。

2.多变量的声明方法

如有多个变量是同一种数据类型,那么可以在同一条语句中将它们声明完毕,例如:

stringx,y,z;

这条语句同时声明了三个string类型的变量,分别命名为xyz。

但是需要注意的是同一条语句中只能声明同种类型的变量,不能混合声明,例如:

stringx,inty,doublez;

这个变量的声明方式是不能通过编译的,在这种情况下只能分开声明为三条单变量的语句。

stringx;

inty;

doublez;

4.1.3变量的作用域

变量的作用域是变量在程序中的有效范围,也就是变量在程序中创建和销毁的跨度。

根据变量的作用域可以将变量划分为类的字段级变量和方法体内的局部变量。

C#中变量作用域的规则如下:

●如果变量以类的字段的形式定义,那么它的作用域与类本身所在的作用域相同;

●如果变量是方法体的局部变量,那么它的作用域限于声明它的方法体内部,即以{}为界限。

●如果变量是在for、while、foreach循环语句中定义的变量,那么它的作用域限于该循环体内。

代码4-1变量的作用域

namespaceCode4_1

{

classSampleObjcet

{

//类的字段级变量,和类本身的作用域相同

publicstringsampleValue;

}

classVariableScope

{

//

publicstringfieldvar;

publicvoidDoSomething()

{//SomeVar为方法体的局部变量,作用域局限于其方法体内部,以{}为界

varSomeVar="somevar";

int[]SomeVars={1,2,3,4,5};

//item为循环体变量,作用域在其循环体内部

foreach(variteminSomeVars)

{

Console.WriteLine(item);

}

//这里定义SampleObjcet类的对象sObjce,其字段sampleValue的作

//用域和该对象的作用域相同

SampleObjcetsObjcet=newSampleObjcet();

sObjcet.sampleValue="sampleValue'sscope";

}

}

}

4.1.4变量的初始化

声明变量是用来存放数据的,所谓初始化就是对刚声明的变量进行初始赋值的过程。

基于安全的考虑,C#对于变量的初始化过程有一定的要求:

●所有方法体内的局部变量在被初始化之前都会被当作编译异常,这意味着局部变量在声明的时候就要赋值,例如代码4-1中SomeVar为方法体的局部变量,因而在声明时就要赋值为varSomeVar="somevar",若只声明不赋值,例如varSomeVar则编译时会抛出错误。

●所有类的字段级变量,可以只声明不初始化,在这种情况下,编译器会自动将其初始化为所属类型等价于0的值,例如布尔类型被初始化为false,数值类型被初始化为0,所有引用类型被初始化null。

 

4.1.5类型推断

所谓类型推断就是编译器通过对变量的初始值判断进而推断出变量具体类型。

C#中,编译器只能推断出局部变量的类型,不能推断出字段级变量的类型。

这是因为局部变量声明即要初始化赋值,这样编译器就可以判断其真实变量类型。

C#类型推断只要引入关键字var来定义变量的数据类型即可,例如:

vari=10;

这样编译器就能够推断出变量类型为整形。

代码4-2var关键字的使用

classPerson

{

privateintAge;

publicvoidSayHello()

{

varmessage="Myageis{0}";

Console.WriteLine(message,Age);

}

}

代码中字段级变量Age不能使用关键字var进行类型推断,局部变量message声明时就要初始化,因此可以用var关键字进行类型推断。

4.2常量

常量就是一旦声明并且初始化就不在改变的数据。

常量的声明要使用关键字const,语法格式与变量类似:

[常量修饰符]const数据类型常量名;

例如:

publicconstinta=1;

常量修饰符可以是public,protected,internal和private。

这些修饰符的具体含义将在“方法”一章中具体讲解。

常量是静态的,它能够在类中直接访问,除此之外常量还有一些特征需要了解:

●常量必须在声明的时候就立即初始化,其值在初始化后将无法再进行更改。

●常量必须使用显式类型声明,不能使用类型推断关键字var。

●常量即可以作为类的字段级常量,也可以是定义在方法体内作为局部常量。

4.3数据类型

声明变量遵照的语法格式中,数据类型是必要的部分。

它定义了数据的模型,其包含了很多的数据模板信息,比如:

数据所需要的空间大小;取值范围;继承的基类信息以及自身的方法、字段、事件等。

在C#中主要的数据类型包括值类型和引用类型。

作为值类型的变量,它们直接存放程序运行时所涉及的数据,且彼此之间的数据内容是隔离的,不会影响。

值类型包含了简单类型、枚举类型和结构类型三种。

作为引用类型的变量存储的是存放数据的内存地址,因此两个命名不同的引用类型变量若存储的是同一个内存地址,则实际上对应着同一个数据,这也导致了变量之间相互影响的现象。

引用类型包含了类、接口、委托、数组、字符串。

4.3.1值类型

4.3.1.1简单类型

简单类型是值类型中的一种,它包括整数类型、浮点类型、十进制类型和布尔类型

1.整数类型

C#中有9种不同的整数类型,它们分别是:

短字节型(sbyte)、字节型(byte)、短整型(short)、无符号短整型(ushort)、整型(int)、无符号整型(uint)、长整型(long)、无符号长整型(ulong)和Unicode字符(char),划分的依据是整数类型在内存中所占的位数。

表4-3C#中的整数类型

整数类型

含义

取值范围

Sbyte

有符号8位整数

-128~127

Byte

无符号8位整数

0~255

Short

有符号16位整数

-32768~32767

Ushort

无符号16位整毅

0~65535

Int

有符号32位整数

-2147483648~2147483647

Uint

无符号32位整数

0~4294967295

Long

有符号64位整数

-9223372036854775808~9223372036854775807

Ulong

无符号64位整数

0~184********709551615

Char

16位字符

0~65535

char之所以是整形是因为它用于声明一个16位的Unicode字符,通过它可以表示世界上大多数语言。

字符型变量的初始化有三种方法:

方法1:

直接赋值字符

chars=’X’;//s变量中存储字符X

方法2:

通过前缀\x(十六进制转义符)给字符变量赋值

chars=’\x0058’;//s变量中存储字符X

方法3:

通过前缀\u(Unicode表示法)给字符变量赋值

chars=’\u0058’;//s变量中存储字符X

2.浮点型

浮点数是在计算机系统中用来表示实数的数据类型。

在C#中,浮点型数据包括单精度浮点型(float)和双精度浮点型(double)两种类型。

它们的差别在于取值范围和精度不同。

单精度浮点型:

取值范围在

之间,精度为7位数。

单精度浮点型的赋值方法为:

floatx=3.1415f;

这里需要注意的是f不能省略,因为在默认情况下,赋值运算右侧的实数被视为double类型,如果上面的声明没有使用后缀f,则会因为你试图将一个double值存储到float变量中而发生编译错误。

双精度浮点型:

取值范围在

之间,精度为15到16位数。

如果希望一个整数被视为double类型,则整数后面可以使用后缀d,例如:

doublex=100d;

计算机对浮点数的运算速度大大低于对整数的运算速度,因此在对精度要求不高的情况下,可以采用float类型,对精度有较高要求的情况下可以采用double类型。

3.十进制类型

在C#中十进制类型主要是应用在金融和货币的计算。

十进制型:

取值范围

之间,精度为28个小数位。

可以看出十进制类型的取值范围比double类型要小,但是精度更高。

当定义一个decimal变量并且赋值的时候,要使用m下标来表示,例如:

decimalx=3.14m;

如果省略了m,则会被编译器当做double类型来处理。

4.布尔类型

布尔类型只含有两个数值:

true和false,即真或者假。

在C#中整数类型和布尔类型不在存在直接转化,将任何非零值直接转化为true值也是不合法的。

例如:

booli=1;

这种写法在C/C++中是正确的,但是在C#中则是非法的。

4.3.1.2结构类型

可以把结构类型看成是一组简单类型的集合,用于来表示更加复杂的数据类型。

例如一个学生信息中应该包含姓名、学号、班级、专业、宿舍号等,简单类型数据并不能表示这种复杂的数据类型,但是借助结构类型可以将这些相关的信息放在一起用一个变量进行表示。

结构类型采用struct关键进行声明,例如可以把学生信息定义为如下的形式:

代码4-3结构定义

structStudent

{

publicstringsID;

publicstringname;

publicstringcollege;

publicstringspecialty;

}

4.3.1.3枚举类型

一般情况下,当我们定义一个变量以后,该变量的数值会随着程序的运行而发生实时的变化,但有的变量会在几个固定数值之间取值,在这种情况下就可以用枚举类型来表示该变量。

即枚举类型是把类型相同、取值固定的一组数据作为一个集合放到一起形成的一种数据类型。

例如当定义变量sex来表示人的性别的时候,这个变量只会取值“男”或“女”,这种数据结构就可以使用枚举来定义。

枚举类型采用关键字enum来声明,例如

代码4-4枚举类型定义

enumSex

{

male,female

};

在这里需要注意一点的是:

结构类型是由不同类型的数据组成的一组新的数据类型。

而枚举则不同,枚举类型的取值是相同类型的数据,且在某一时刻只能取枚举中某一个值。

默认情况下,枚举中每个元素的基础类型是int,第一个枚举数的值为0,后面每个枚举数的值依次递增1。

例如定义一个枚举类型表示星期,可以写成如下代码:

enumDays

{

Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday

};

则Sunday是0,Monday是1,Tuesday是2等。

同时也可用初始值来重写默认值,例如:

enumDays

{

Sunday=1,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday

};

在此枚举中,强制元素序列从1而不是0开始,后面的取值依次递增。

代码4-5枚举类型案例1

namespaceConsoleApplication2

{

enumColor

{

Red,

Green,

Blue

}

classProgram

{

staticvoidMain(string[]args)

{

Colorcolor=Color.Red;

switch(color)

{

caseColor.Red:

Console.WriteLine("Red");

break;

caseColor.Green:

Console.WriteLine("Green");

break;

caseColor.Blue:

Console.WriteLine("Blue");

break;

default:

Console.WriteLine("Unknowncolor");

break;

}

Console.ReadKey();

}

}

}

代码4-6枚举类型案例2

namespaceTest

{

publicenumDay:

uint//如果不设置数据类型,默认为int

{Mon=1,Tue=2,Wed=3,Thu=4,Fri=5,Sat,Sun}

classProgram

{

publicstaticvoidMain(string[]args)

{

Console.WriteLine(ChooseDay(Day.Sun));

Console.WriteLine(ChooseDay(Day.Mon));

}

staticstringChooseDay(Dayd)

{

stringtmp=string.Empty;

switch(d)

{

caseDay.Mon:

tmp=string.Format("你选择一周中的第{0}天(即周一),工作",(uint)d);

break;

caseDay.Tue:

tmp=string.Format("你选择一周中的第{0}天(即周二),工作",(uint)d);

break;

caseDay.Wed:

tmp=string.Format("你选择一周中的第{0}天(即周三),工作",(uint)d);

break;

caseDay.Thu:

tmp=string.Format("你选择一周中的第{0}天(即周四),工作",(uint)d);

break;

caseDay.Fri:

tmp=string.Format("你选择一周中的第{0}天(即周五),工作",(uint)d);

break;

caseDay.Sat:

tmp=string.Format("你选择一周中的第{0}天(即周六),休息",(uint)d);

break;

caseDay.Sun:

tmp=string.Format("你选择一周中的第{0}天(即周日),休息",(uint)d);

break;

default:

tmp="不合法";

break;

}

returntmp;

}

}

}

4.3.2引用类型

值类型对于抽象数据结构是没有办法定义的,需要引入另外一种复杂数据类型来进行表示——引用类型。

引用类型和值类型不同,其存储的不是数据而是存储数据的内存地址,因此用一个数据可以有多个引用。

引用类型包含了类、接口、委托、数组、字符串,它是面向对象程序语言的核心,对它的介绍将在后续章节中详细讲解。

4.4null和void

null和void是两个与类型有关的关键。

null用来表示该变量是引用类型,但是未被赋予任何值。

void用来表示该变量没有任何类型,不返回任何值。

4.4.1null的含义

null表示将一个引用类型变量设为“无”。

null值只能赋给引用类型,而不能赋给值类型。

将变量设为null,会让一个引用类型变量不指向任何内存地址。

这里需要注意的是下面两句赋值语句的区别:

stringstuNumber1=null;

stringstuNumber2="";

stuNumber1是一个引用类型变量,但是由于赋值为null,因此该变量没有存放任何内存地址;stuNumber2也是一个引用类型变量,该变量存放了一个内存地址,该地址内存放了空字符""。

4.4.2void的含义

void本质上不是一个数据类型,它只是指出不返回任何数据类型。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1