




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、值类型的变量内含变量值本身,值类型的变量内含变量值本身,C#的值类型可以分为的值类型可以分为简单类型、结构类型和枚举类型等。简单类型、结构类型和枚举类型等。值类型的数据在栈空间中分配:值类型的数据在栈空间中分配: int n=10;10n栈空间栈空间4.1.1 值类型值类型引用类型也称为参考类型。和值类型相比,引用类引用类型也称为参考类型。和值类型相比,引用类型的变量不直接存储所包含的值,而是指向它所要存储型的变量不直接存储所包含的值,而是指向它所要存储的值。的值。换句话说,值类型变量的内存空间中存储的是实际换句话说,值类型变量的内存空间中存储的是实际数据,而引用类型变量在其内存空间中存储的是
2、一个指数据,而引用类型变量在其内存空间中存储的是一个指针,该指针指向存储数据的另一块内存位置。针,该指针指向存储数据的另一块内存位置。由此可见,值类型变量的内存开销要小,访问速度由此可见,值类型变量的内存开销要小,访问速度要快,而引用类型变量的内存开销要大,访问速度稍慢。要快,而引用类型变量的内存开销要大,访问速度稍慢。4.1.2 引用类型引用类型引用类型数据(对象)在堆空间中分配:引用类型数据(对象)在堆空间中分配:object obj=new object();引用类型共分引用类型共分4种类型:类,接口,数组和委托等。种类型:类,接口,数组和委托等。栈空间栈空间obj堆空间堆空间一个一个o
3、bject对象对象1. object类类object是是C#中所有类型(包括所有的值类型和引用类型)中所有类型(包括所有的值类型和引用类型)的基类,的基类,C#中的所有类型都直接或间接地从中的所有类型都直接或间接地从object类中继承。类中继承。因此,对一个因此,对一个object的变量可以赋予任何类型的值:的变量可以赋予任何类型的值: float f=1.23;object obj1; /定义定义obj1对象对象obj1=f;object obj2=China;/定义定义obj2对象并赋初值对象并赋初值对对object类型的变量声明采用类型的变量声明采用object关键字,这个关键字关键字
4、,这个关键字是在是在.NET框架的命名空间框架的命名空间System中定义的,是类中定义的,是类System.Object的别名。的别名。2. string类类C#还定义了一个还定义了一个string类,表示一个类,表示一个Unicode字符序列,专门用字符序列,专门用于对字符串的操作。同样,这个类也是在于对字符串的操作。同样,这个类也是在.NET框架的命名空间框架的命名空间System中定义的,是类中定义的,是类System.String的别名。的别名。字符串在实际中应用非常广泛,利用字符串在实际中应用非常广泛,利用string类中封装的各种内类中封装的各种内部操作,可以很容易完成对字符串处
5、理。例如:部操作,可以很容易完成对字符串处理。例如:string str1=123+abc; /+运算符用于连接字符串运算符用于连接字符串char c=Hello World!1; /运算符可访问运算符可访问string中的单个字符,中的单个字符,c=estring str2=China;string str3=“China”; / 字符串的另一种表示形式,用字符串的另一种表示形式,用引起来。引起来。bool b=(str2=str3); /=运算符用于两个字符串比较,运算符用于两个字符串比较,b=true变量是在程序的运行过程中其值可以发生变化的量,可变量是在程序的运行过程中其值可以发生变化
6、的量,可以在程序中使用变量来存储各种各样的数据,并对它们进行以在程序中使用变量来存储各种各样的数据,并对它们进行读、写、运算等操作。读、写、运算等操作。1. 变量定义变量定义定义定义变量的方法如下:变量的方法如下:访问修饰符访问修饰符 数据类型数据类型 变量名变量名 = 初始值初始值;例如:例如:string name=王华王华;int age=20;4.2.1 变量变量2. 理解值类型的变量理解值类型的变量如果一个变量的值是普通的类型,那么这个如果一个变量的值是普通的类型,那么这个C#变量变量就是值类型的变量。就是值类型的变量。值类型的变量直接把值存放在这个变量名标记的存值类型的变量直接把值
7、存放在这个变量名标记的存储位置上。储位置上。int a=2;栈空间栈空间2aint b=a;栈空间栈空间2a2bb中存放中存放a的一份拷贝,以后的一份拷贝,以后a与与b没有关系。没有关系。3. 理解引用类型的变量理解引用类型的变量引用表示所使用的是变量或对象的地址而不是变量或对引用表示所使用的是变量或对象的地址而不是变量或对象本身象本身。例如。例如:MyClass var; /MyClass是已定义的类或类型是已定义的类或类型var=new MyClass();第第2个语句使用个语句使用new操作符来创建对象,操作符来创建对象,C#会在堆存储空会在堆存储空间中为这个对象分配足够的空间来存放间中
8、为这个对象分配足够的空间来存放MyClass类的实例,类的实例,然后把这个实例的地址赋给这个引用类型的变量然后把这个实例的地址赋给这个引用类型的变量var。这个。这个引用变量就可以用来引用堆中创建的那个对象了。引用变量就可以用来引用堆中创建的那个对象了。object a=new object();栈空间栈空间a堆空间堆空间一个一个object对象对象object b=a;栈空间栈空间a堆空间堆空间一个一个object对象对象ba和和b都引用同一个都引用同一个object对象,可以对象,可以通过引用变量通过引用变量a或或b对该对象进行修改。对该对象进行修改。所谓常量,就是在程序执行中其值保持固定
9、不变的量。所谓常量,就是在程序执行中其值保持固定不变的量。常量一般分为直接常量和符号常量,常量的类型可以是任何常量一般分为直接常量和符号常量,常量的类型可以是任何一种值类型或引用类型。一种值类型或引用类型。1. 直接常量直接常量直接常量是指把程序中不变的量直接硬编码为数值或字直接常量是指把程序中不变的量直接硬编码为数值或字符串值,例如,以下都是直接常量:符串值,例如,以下都是直接常量:100 /整型直接常量整型直接常量1.23e5 /浮点型直接常量浮点型直接常量4.2.2 常量常量2. 符号常量符号常量符号常量是通过关键字符号常量是通过关键字const声明的常量,包括常量的名称声明的常量,包括
10、常量的名称和它的值。常量声明的格式如下:和它的值。常量声明的格式如下:const 数据类型数据类型 常量名常量名=初始值初始值;其中,其中,“常量名常量名”必须是必须是C#的合法标识符,在程序中通过的合法标识符,在程序中通过常量名来访问该常量常量名来访问该常量。例如,以下语句定义了一个例如,以下语句定义了一个double型的常量型的常量PI,它的值是,它的值是3.14159265:const double PI=3.14159265;依照运算符作用的运算数的个数来分,依照运算符作用的运算数的个数来分,C#中共有中共有3种种类型的运算符:类型的运算符:l一元运算符:一元运算符带一个运算数并使用前
11、缀符(如一元运算符:一元运算符带一个运算数并使用前缀符(如-x)或)或后缀符(如后缀符(如x+););l二元运算符:二元运算符带两个运算数并且全部使用中缀符二元运算符:二元运算符带两个运算数并且全部使用中缀符(如(如x + y););l三元运算符:只存在唯一一个三元运算符三元运算符:只存在唯一一个三元运算符“?:”。三元运算符带。三元运算符带三个运算数并使用中缀符(三个运算数并使用中缀符(c?x:y)。)。4.3.1 常用的常用的C#运算符运算符运算符类别运算符类别运算符运算符算术算术+ - * /逻辑逻辑& | & | true false字符串串连字符串串连+递增、递减递增
12、、递减+ -移位移位关系关系= != =赋值赋值= += -= *= /= %= |= = =成员访问成员访问.索引索引条件条件?:委托串连和删除委托串连和删除+ -创建对象创建对象New类型信息类型信息Is sizeof TypeOf溢出异常控制溢出异常控制Checked uncheckedC#中的运算符中的运算符 当一个表达式包含多样运算符时,运算符的优先级控当一个表达式包含多样运算符时,运算符的优先级控制着单个运算符求值的顺序。例如表达式:制着单个运算符求值的顺序。例如表达式:x + y * z首先求出首先求出y * z然后将结果与然后将结果与x相加,因为相加,因为*的优先级比的优先级比
13、+的优先级要高。如果需要调整优先级,可以使用括号的优先级要高。如果需要调整优先级,可以使用括号“()”。例如需要先求例如需要先求x与与y的和,然后再将结果与的和,然后再将结果与z相乘,则可相乘,则可以编写如下表达式:以编写如下表达式:(x + y) * z4.3.2 运算符的优先级运算符的优先级4.3.3 装箱和拆箱装箱和拆箱1. 装箱转换装箱转换 装箱转换是指将一个值类型的数据隐式地转换成一个引装箱转换是指将一个值类型的数据隐式地转换成一个引用类型的数据。把一个值类型装箱,就是创建一个用类型的数据。把一个值类型装箱,就是创建一个object类类型的实例,并把该值类型的值复制给这个型的实例,并
14、把该值类型的值复制给这个object实例。实例。 例如,下面的语句就执行了装箱转换:例如,下面的语句就执行了装箱转换:int i=10;object obj=i;/装箱装箱2. 拆箱转换拆箱转换 拆箱转换是指将一个引用类型的数据显式地转换成一个拆箱转换是指将一个引用类型的数据显式地转换成一个值类型数据。值类型数据。 拆箱操作分为两步:首先检查对象实例,确保它是给定拆箱操作分为两步:首先检查对象实例,确保它是给定值类型的一个装箱值,然后把实例的值复制到值类型数据中。值类型的一个装箱值,然后把实例的值复制到值类型数据中。例如,下面的语句就执行了拆箱转换:例如,下面的语句就执行了拆箱转换:objec
15、t obj=10;int i=(int)obj;/拆箱拆箱 拆箱转换需要(而且必须)执行显式转换,这是它拆箱转换需要(而且必须)执行显式转换,这是它与装箱转换的不同之处。与装箱转换的不同之处。1. 结构类型的声明结构类型的声明声明声明结构类型的一般格式如下:结构类型的一般格式如下:struct 结构类型名称结构类型名称字段访问修饰符字段访问修饰符 数据类型数据类型 字段字段1; 字段访问修饰符字段访问修饰符 数据类型数据类型 字段字段2; . 字段访问修饰符字段访问修饰符 数据类型数据类型 字段字段n; “字段访问修饰符字段访问修饰符”主要取值有主要取值有public和和private(默认(
16、默认值),其中值),其中public表示可以通过该类型的变量访问该字段,表示可以通过该类型的变量访问该字段,private表示不能通过该类型的变量访问该字段。表示不能通过该类型的变量访问该字段。4.4.1 结构类型结构类型例如,以下声明一个具有姓名和年龄等字段的结构类例如,以下声明一个具有姓名和年龄等字段的结构类型型Student:struct Student/声明结构类型声明结构类型Studentpublic int xh;/学号学号 public string xm;/姓名姓名public string xb;/性别性别 public int nl;/年龄年龄public string b
17、h;/班号班号2. 结构类型变量的定义结构类型变量的定义声明一个结构类型后,可以定义该结构类型的变量(简声明一个结构类型后,可以定义该结构类型的变量(简称为结构变量)。定义结构变量的一般格式如下:称为结构变量)。定义结构变量的一般格式如下:结构类型结构类型 结构变量结构变量;例如,在前面的结构类型例如,在前面的结构类型Student声明后,定义它的两个声明后,定义它的两个变量如下:变量如下:Student s1,s2;3. 结构变量的使用结构变量的使用结构变量的使用主要包括字段访问和结构变量赋值等。结构变量的使用主要包括字段访问和结构变量赋值等。(1)访问结构变量字段)访问结构变量字段访问结构
18、变量字段的一般格式如下:访问结构变量字段的一般格式如下:结构变量名结构变量名.字段名字段名例如,例如,s1.xh表示结构变量表示结构变量s1的学号,的学号,s2.xm表示结构变表示结构变量量s2的姓名的姓名。(2)结构变量的赋值)结构变量的赋值结构变量的赋值有两种方式:结构变量的赋值有两种方式:l结构变量的字段赋值:使用方法与普通变量相同。结构变量的字段赋值:使用方法与普通变量相同。l结构变量之间赋值:要求赋值的两个结构变量必须类型相同,结构变量之间赋值:要求赋值的两个结构变量必须类型相同,例如:例如:s1 = s2;这样这样s2的所有字段值赋给的所有字段值赋给s1的对应字段。的对应字段。枚举
19、类型也是一种自定义数据类型,它允许用符号代表枚举类型也是一种自定义数据类型,它允许用符号代表数据。枚举是指程序中某个变量具有一组确定的值,通过数据。枚举是指程序中某个变量具有一组确定的值,通过“枚举枚举”可以将其值一一列出来。可以将其值一一列出来。 4.4.2 枚举类型枚举类型1. 枚举类型的声明枚举类型的声明 枚举类型使用枚举类型使用enum关键字声明,其一般语法形式如下:关键字声明,其一般语法形式如下:enum 枚举名枚举名枚举成员枚举成员1,枚举成员枚举成员2,其中,其中,“enum”是结构类型的关键字。例如,以下声明一是结构类型的关键字。例如,以下声明一个名称为个名称为color的表示
20、颜色的枚举类型:的表示颜色的枚举类型:enum Color Red,Green,Blue,White,Black在声明枚举类型后,可以通过枚举名来访问枚举成员,在声明枚举类型后,可以通过枚举名来访问枚举成员,其使用语法如下:其使用语法如下:枚举名枚举名.枚举成员枚举成员2. 枚举成员的赋值枚举成员的赋值在声明的枚举类型中,每一个枚举成员都有一个相对应在声明的枚举类型中,每一个枚举成员都有一个相对应的常量值,默认情况下的常量值,默认情况下C#规定第规定第1个枚举成员的值取个枚举成员的值取0,它后,它后面的每一个枚举成员的值按加上面的每一个枚举成员的值按加上1递增。例如,前面递增。例如,前面Col
21、or中,中,Red值为值为0,Green值为值为1,Blue值为值为2,依次类推。,依次类推。可以为一个或多个枚举成员赋整型值,当某个枚举成员可以为一个或多个枚举成员赋整型值,当某个枚举成员赋值后,其后的枚举成员没有赋值的话,它自动在前一个枚赋值后,其后的枚举成员没有赋值的话,它自动在前一个枚举成员值之上加举成员值之上加1。例如:。例如:enum Color Red=0, Green, Blue=3, White, Black=1;则这些枚举成员的值分别为则这些枚举成员的值分别为0、1、3、4、1。3. 枚举类型变量的定义枚举类型变量的定义声明一个枚举类型后,可以定义该枚举类型的变量(简声明一
22、个枚举类型后,可以定义该枚举类型的变量(简称为枚举变量)。定义枚举变量的一般格式如下:称为枚举变量)。定义枚举变量的一般格式如下: 枚举枚举类型类型 枚举变量枚举变量;例如,在前面的枚举类型例如,在前面的枚举类型Color声明后,定义它的两个变声明后,定义它的两个变量如下:量如下:Color c1,c2;4. 枚举变量的使用枚举变量的使用枚举变量的使用赋值和访问等。枚举变量的使用赋值和访问等。(1)枚举变量的赋值)枚举变量的赋值枚举变量赋值的语法格式如下:枚举变量赋值的语法格式如下:枚举变量枚举变量=枚举名枚举名.枚举成员枚举成员例如:例如:c1=Color.Red;(2)枚举变量的访问)枚举
23、变量的访问枚举变量像普通变量一样直接访问。枚举变量像普通变量一样直接访问。1. if语句语句if (条件表达式条件表达式) 语句语句;2. ifelse语句语句if (条件表达式条件表达式) 语句语句1;else 语句语句2;条件表达式条件表达式语句语句1 1语句语句2 2条件表达式条件表达式语句语句是是否否是是否否4.5.1 选择控制语句选择控制语句3. ifelse if语句语句if (条件表达式条件表达式1) 语句语句1;else if (条件表达式条件表达式2) 语句语句2; else if (条件表达式条件表达式n) 语句语句n;else 语句语句n+1; false false f
24、alse true true true 条件条件表达式表达式 1 语句语句 1 条件条件表达式表达式 2 条件条件表达式表达式n 语句语句 2 语句语句 n+1语句语句 n false 【例例4.1】设计将输入的学生分数转换成等级的网页设计将输入的学生分数转换成等级的网页WebFtected void Button1_Click(object sender, EventArgs e) int n; n = int.Parse(TextBox1.Text); if (n = 90) TextBox2.Text = 优秀优秀; else if (n=80) TextBox2.Tex
25、t = 优良优良; else if (n = 70) TextBox2.Text = 中等中等; else if (n = 60) TextBox2.Text = 及格及格; else TextBox2.Text = 不及格不及格; 设计界面设计界面运行界面运行界面4. switch语句语句switch语句也称为开关语句,用于有多重选择的场语句也称为开关语句,用于有多重选择的场合,用于测试某一个变量具有多个值时所执行的动作。合,用于测试某一个变量具有多个值时所执行的动作。switch语句的语法形式如下:语句的语法形式如下:switch (表达式表达式)case 常量表达式常量表达式1: 语句语
26、句1; case 常量表达式常量表达式2: 语句语句2; case 常量表达式常量表达式n: 语句语句n; default:语句语句n+1;switch (表达式表达式) case 常量表达式常量表达式1: 语句语句1;break; case 常量表达式常量表达式2: 语句语句2;break; case 常量表达式常量表达式n: 语句语句n;break; default:语句语句n+1;break; false false false false true true 语句语句 2 语句语句 n+1 语句语句 n 表达式表达式 =常量表达常量表达式式 n 表达式表达式 =常量表达常量表达式式2语
27、句语句 1 表达式表达式 =常量表达常量表达式式 1 true C#中的循环控制语句有中的循环控制语句有while、do-while和和for语句,另语句,另外,外,break和和continue语句用于结束整个循环和结束当前一语句用于结束整个循环和结束当前一趟循环。趟循环。1. while语句语句while语句的一般语法格式如下:语句的一般语法格式如下:while (条件表达式条件表达式) 语句语句; false true 条件 表达式 语句 while 4.5.2 循环控制语句循环控制语句【例例4.2】设计一个求设计一个求1n之和的网页之和的网页WebForm2,其中,其中n为为正整数,由
28、用户输入。正整数,由用户输入。设计界面设计界面protected void Button1_Click(object sender, EventArgs e) int n,i=1,s=0; n = int.Parse(TextBox1.Text); while (i = n) s += i; i+; TextBox2.Text = string.Format(0,s);运行界面运行界面2. do-while语句语句do-while语句的一般语法格式如下:语句的一般语法格式如下:do 语句;语句;while (条件表达式条件表达式); false true 条件条件 表达式表达式 语句语句 do
29、-while 3. for语句语句for语句通常用于预先知道循环次数的情况,其一般语语句通常用于预先知道循环次数的情况,其一般语法格式如下:法格式如下:for (表达式表达式1;表达式表达式2;表达式表达式3) 语句语句;for循环的执行过程为:循环的执行过程为:(1)执行)执行“表达式表达式1”;(2)计算)计算“表达式表达式2”的值;的值;(3)如果)如果“表达式表达式2”的值为的值为true,先执行后面的,先执行后面的“语句语句”,再执行,再执行“表达式表达式3”,然后转向步骤(,然后转向步骤(1);如果);如果“表达式表达式2”的值为的值为false,则,则结束整个结束整个for循环。
30、循环。4. break和和continue语句语句break语句使程序从当前的循环语句(语句使程序从当前的循环语句(do、while和和for)内跳转出来,接着执行循环语句后面的语句。内跳转出来,接着执行循环语句后面的语句。continue语句也用于循环语句,它类似于语句也用于循环语句,它类似于break,但它,但它不是结束整个循环,而是结束循环语句的当前一次循环,不是结束整个循环,而是结束循环语句的当前一次循环,接着执行下一次循环。在接着执行下一次循环。在while和和do-while循环结构中,执行循环结构中,执行控制权转至对控制权转至对“条件表达式条件表达式”的判断,在的判断,在for结
31、构中,转去结构中,转去执行执行“表达式表达式2”。 定义一维数组的语法格式如下:定义一维数组的语法格式如下:数组类型数组类型 数组名数组名;其中,其中,“数据类型数据类型”为为C#中合法的数据类型,中合法的数据类型,“数组数组名名”为为C#中合法的标识符中合法的标识符。4.6.1 一维数组的定义一维数组的定义例如,以下定义了例如,以下定义了3个一维数组,即整型数组个一维数组,即整型数组a、双、双精度数组精度数组b和字符串数组和字符串数组c:int a;double b;string c;在定义数组后,必须对其进行初始化才能使用。初始在定义数组后,必须对其进行初始化才能使用。初始化数组有两种方法
32、:动态初始化和静态初始化。化数组有两种方法:动态初始化和静态初始化。动态初始化需要借助动态初始化需要借助new运算符,为数组元素分配内存空运算符,为数组元素分配内存空间,并为数组元素赋初值,数值类型初始化为间,并为数组元素赋初值,数值类型初始化为0,布尔类型初,布尔类型初始化为始化为false,字符串类型初始化为,字符串类型初始化为null。动态初始化数组的格式如下:动态初始化数组的格式如下:数组类型数组类型 数组名数组名=new 数据类型数据类型n元素值元素值0,元素值元素值1,元素值元素值n-1;其中,其中,“数组类型数组类型”是数组中数据元素的数据类型,是数组中数据元素的数据类型,n为为
33、“数组长度数组长度”,可以是整型常量或变量,后面一层大括号为初,可以是整型常量或变量,后面一层大括号为初始值部分。始值部分。4.6.2 一维数组的动态初始化一维数组的动态初始化为了访问一维数组中的某个元素,需指定数组名称和数为了访问一维数组中的某个元素,需指定数组名称和数组中该元素的下标(或索引)。所有元素下标从组中该元素的下标(或索引)。所有元素下标从0开始,到开始,到数组长度减数组长度减1。例如,以下语句输出数组。例如,以下语句输出数组myarr的所有元素值:的所有元素值:for (i=0;i5;i+) /输出输出ai的值的值;4.6.3 访问一维数组中的元素访问一维数组中的元素为了保证程
34、序更加完备,经常在程序中会使用到异常为了保证程序更加完备,经常在程序中会使用到异常处理语句处理语句try-catch-finally,其使用语法格式如下:,其使用语法格式如下:try 被保护的语句块被保护的语句块; catch 异常申明异常申明1 语句语句1; finally 完成善后工作的语句块完成善后工作的语句块; 4.7.1 异常处理语句异常处理语句【例例4.3】设计检测两整数除法运算错误的网页设计检测两整数除法运算错误的网页WebForm3,做,做除法运算的两个正整数由用户输入。除法运算的两个正整数由用户输入。设计界面设计界面protected void Button1_Click(o
35、bject sender, EventArgs e) int a, b, c; string mystr = ; try a = int.Parse(TextBox1.Text); b = int.Parse(TextBox2.Text); c = a/b; mystr = string.Format(0,c); catch(DivideByZeroException ex) mystr = 除零错误除零错误; catch (Exception ex) mystr = ex.Message; finally TextBox3.Text = mystr; 运行界面运行界面在在C#中,一个应用程序
36、包含太多的内容,通过使用命中,一个应用程序包含太多的内容,通过使用命名空间进行分类。名空间进行分类。使用命名空间有两种方式,一种是明确指出名称空间使用命名空间有两种方式,一种是明确指出名称空间的位置,另一种是通过的位置,另一种是通过using关键字引用命名空间。关键字引用命名空间。任何一个名称空间都可以在代码中直接使用。例如:任何一个名称空间都可以在代码中直接使用。例如:using System;4.7.2 使用命名空间使用命名空间从计算机语言角度来说,类是一种数据类型,而对象是从计算机语言角度来说,类是一种数据类型,而对象是具有这种类型的变量。具有这种类型的变量。1. 类的声明类的声明类的声
37、明语法格式如下:类的声明语法格式如下:类的修饰符类的修饰符 class 类名类名 :基类名基类名 /类的成员类的成员;4.8.1类类类的修饰符类的修饰符说明说明public公有类。表示不受限制对该类的访问公有类。表示不受限制对该类的访问protected保护类。表示只能从所在类和所在类派生的子类进保护类。表示只能从所在类和所在类派生的子类进行访问行访问internal内部类。只有其所在类才能访问内部类。只有其所在类才能访问private私有类。只有该类才能访问私有类。只有该类才能访问abstract抽象类。表示该类是一个不完整的类,不允许建立抽象类。表示该类是一个不完整的类,不允许建立类的实例
38、类的实例sealed密封类。不允许从该类派生新的类密封类。不允许从该类派生新的类“类的修饰符类的修饰符”有多个,其说明如有多个,其说明如 下表:下表:例如,以下声明了一个例如,以下声明了一个Person类类:public class Person/声明声明Person类,其访问级别为类,其访问级别为publicpublic int pno;/编号公有字段编号公有字段string pname;/姓名私有字段姓名私有字段public void setdata(int no,string name)/定义定义setdata方法方法 pno=no; pname=name;public void dis
39、pdata()/定义定义dispdata方法方法 Console.WriteLine(0 1, pno, pname);2. 类的成员类的成员类的成员可以分为两大类:类本身所声明的、以及从基类的成员可以分为两大类:类本身所声明的、以及从基类中继承而来的。类的成员如下:类中继承而来的。类的成员如下:l字段字段:字段存储类要满足其设计所需要的数据,也称为数:字段存储类要满足其设计所需要的数据,也称为数据成员。据成员。l属性属性:属性是类中可以像类中的字段一样访问的方法。属:属性是类中可以像类中的字段一样访问的方法。属性可以为类字段提供保护,避免字段在对象不知道的情况性可以为类字段提供保护,避免字段
40、在对象不知道的情况下被更改。下被更改。l方法方法:方法定义类可以执行的操作。方法可以接受提供输:方法定义类可以执行的操作。方法可以接受提供输入数据的参数,并且可以通过参返回输出数据。方法还可入数据的参数,并且可以通过参返回输出数据。方法还可以不使用参数而直接返回值以不使用参数而直接返回值。l委托委托:定义了方法的类型,使得可以将方法当作另一个方:定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,法的参数来进行传递,这种将方法动态地赋给参数的做法,使得程序具有更好的可扩展性使得程序具有更好的可扩展性l事件事件:事件是向其他对象提供有关事件发生(如单击
41、按钮:事件是向其他对象提供有关事件发生(如单击按钮或成功完成某个方法)通知的一种方式。或成功完成某个方法)通知的一种方式。l运算符运算符:运算符是对操作数执行运算的术语或符号,如:运算符是对操作数执行运算的术语或符号,如 +、*、 等。等。l构造函数构造函数:构造函数是在第一次创建对象时调用的方法。:构造函数是在第一次创建对象时调用的方法。它们通常用于初始化对象的数据。它们通常用于初始化对象的数据。l析构函数析构函数:析构函数是当对象即将从内存中移除时由运行:析构函数是当对象即将从内存中移除时由运行库执行引擎调用的方法。它们通常用来确保需要释放的所库执行引擎调用的方法。它们通常用来确保需要释放
42、的所有资源都得到了适当的处理。有资源都得到了适当的处理。类成员的访问修饰符:类成员的访问修饰符:public:公有成员。提供了类的外部界面,允许类的使用者从外部:公有成员。提供了类的外部界面,允许类的使用者从外部进行访问,这是限制最少的一种访问方式。进行访问,这是限制最少的一种访问方式。private:私有成员:私有成员(默认的默认的)。仅限于类中的成员可以访问,从类的。仅限于类中的成员可以访问,从类的外部访问私有成员是不合法的,如果在声明中没有出现成员的访外部访问私有成员是不合法的,如果在声明中没有出现成员的访问修饰符,按照默认方式成员为私有的。问修饰符,按照默认方式成员为私有的。prote
43、cted:保护成员。这类成员不允许外部访问,但允许其派生:保护成员。这类成员不允许外部访问,但允许其派生类成员访问。类成员访问。internal:内部成员。允许同一个命名空间中的类访问。:内部成员。允许同一个命名空间中的类访问。readonly:只读成员。这类成员的值只能读,不能写。也就是说,:只读成员。这类成员的值只能读,不能写。也就是说,除了赋予初始值外,在程序的任何一个部分将无法更改这个成员除了赋予初始值外,在程序的任何一个部分将无法更改这个成员的值。的值。3. 分部类分部类分部类可以将类(结构或接口等)的声明拆分到两个或多分部类可以将类(结构或接口等)的声明拆分到两个或多个源文件中。若
44、要拆分类的代码,被拆分类的每一部分的定义个源文件中。若要拆分类的代码,被拆分类的每一部分的定义前边都要用前边都要用partial关键字修饰关键字修饰。每个网页的逻辑代码中都声明了一个分部类,例如每个网页的逻辑代码中都声明了一个分部类,例如WebForm1网页网页的逻辑代码的逻辑代码WebForm1.aspx.cs中有以下代码:中有以下代码:public partial class WebForm1 : System.Web.UI.Page1. 定义类的对象定义类的对象一旦声明了一个类,就可以用它作为数据类型来定义类一旦声明了一个类,就可以用它作为数据类型来定义类对象(简称为对象)。定义类的对象
45、分两步:对象(简称为对象)。定义类的对象分两步:(1)定义对象引用)定义对象引用其语法格式如下:其语法格式如下:类名类名 对象名对象名;例如,以下语句定义例如,以下语句定义Person类的对象引用类的对象引用p:Person p;4.8.2 对象对象(2)创建类的实例)创建类的实例其语法格式如下:其语法格式如下:对象名对象名=new 类名类名( );例如,以下语句创建例如,以下语句创建Person类的对象实例:类的对象实例:p=new Persone();以上两步也可以合并成一步。其语法格式如下:以上两步也可以合并成一步。其语法格式如下:类名类名 对象名对象名=new 类名类名();例如:例如
46、:Person p=new Person();2. 访问对象的字段访问对象的字段访问对象字段的语法格式如下:访问对象字段的语法格式如下:对象名对象名.字段名字段名其中,其中,“.”是一个运算符,该运算符的功能是表示对象的是一个运算符,该运算符的功能是表示对象的成员。成员。例如,前面定义的例如,前面定义的p对象的成员变量表示为:对象的成员变量表示为:p.pno3. 调用对象的方法调用对象的方法调用对象的方法的语法格式如下:调用对象的方法的语法格式如下:对象名对象名.方法名方法名(参数表参数表)例如,调用前面定义的例如,调用前面定义的p对象的成员方法对象的成员方法setdata为:为:p.setd
47、ata(101,Mary);【例例4.4】设计一个显示类对象成员的网页设计一个显示类对象成员的网页WebForm4。 解:解:其设计步骤如下其设计步骤如下: 打开打开ch4网站,选择网站,选择“网站网站|添加新项添加新项”菜单命令,出现菜单命令,出现“添加新添加新项项-ch4”对话框,在中间列表中选择对话框,在中间列表中选择“Web窗体窗体”,将文件名称改为,将文件名称改为WebForm4.aspx,其他保持默认项,单击,其他保持默认项,单击“添加添加”按钮,创建一个空按钮,创建一个空的网页。的网页。 选择选择“网站网站|添加新项添加新项”菜单命令,出现菜单命令,出现“添加新项添加新项”对话框
48、,对话框,从模板列表中选择从模板列表中选择“类类”选项,保持默认类文件名选项,保持默认类文件名Class1.css,单击,单击“添加添加”按钮,此时出现系统消息框,单击按钮,此时出现系统消息框,单击“是是”按钮,表示将该类按钮,表示将该类文件放在系统自动创建的文件放在系统自动创建的App_Code目录中,设计目录中,设计Class1类的代码如下:类的代码如下:public class Class1int xh=0; string xm=; public void setdata(int xh1,string xm1) xh = xh1; xm = xm1; public int getxh()
49、 return xh; public string getxm() return xm; 保存保存该文件后,设计该文件后,设计WebForm4网页如下:网页如下:设计界面设计界面 双击双击Button1控件,出现代码编辑窗口,输入以下事件过程代码:控件,出现代码编辑窗口,输入以下事件过程代码:运行界面运行界面protected void Button1_Click(object sender, EventArgs e) Class1 st=new Class1();/定义类对象定义类对象st st.setdata(101,王华王华);/调用方法调用方法 TextBox1.Text = stri
50、ng.Format(0,st.getxh(); TextBox2.Text = st.getxm(); 1. 构造函数构造函数构造函数是在创建给定类型的对象时执行的类方法。构构造函数是在创建给定类型的对象时执行的类方法。构造函数具有如下性质:造函数具有如下性质:4.8.3 构造函数和析构函数构造函数和析构函数构造函数的名称与类的名称相同。构造函数的名称与类的名称相同。构造函数尽管是一个函数,但没有任何类型,即它既不属于构造函数尽管是一个函数,但没有任何类型,即它既不属于返回值函数也不属于返回值函数也不属于void函数。函数。一个类可以有多个构造函数,但所有构造函数的名称都必须一个类可以有多个构
51、造函数,但所有构造函数的名称都必须相同,它们的参数各不相同,即构造函数可以重载。相同,它们的参数各不相同,即构造函数可以重载。当类对象创建时,构造函数会自动地执行;由于它们没有返回类型,当类对象创建时,构造函数会自动地执行;由于它们没有返回类型,不能像其他函数那样进行调用。不能像其他函数那样进行调用。当类对象声明时,调用哪一个构造函数取决于传递给它的参数类型。当类对象声明时,调用哪一个构造函数取决于传递给它的参数类型。构造函数不能被继承。构造函数不能被继承。(1)调用默认构造函数)调用默认构造函数 不带参数的构造函数称为不带参数的构造函数称为“默认构造函数默认构造函数”。无论何时,。无论何时,
52、只要使用只要使用new运算符实例化对象,并且不为运算符实例化对象,并且不为new提供任何参提供任何参数,就会调用默认构造函数。假设一个类包含有默认构造函数,就会调用默认构造函数。假设一个类包含有默认构造函数,调用默认构造函数的语法如下:数,调用默认构造函数的语法如下: 类名类名 对象名对象名 = new 类名类名();(2)调用带参数的构造函数)调用带参数的构造函数 假设一个类中包含有带参数的构造函数,调用这种带参假设一个类中包含有带参数的构造函数,调用这种带参数的构造函数的语法如下:数的构造函数的语法如下: 类名类名 对象名对象名= new 类名类名(参数表参数表);2. 析构函数析构函数在
53、对象不再需要时,希望确保它所占的存储能被收在对象不再需要时,希望确保它所占的存储能被收回。回。C#中提供了析构函数用于专门释放被占用的系统资中提供了析构函数用于专门释放被占用的系统资源。析构函数具有如下性质:源。析构函数具有如下性质:析构函数在类对象销毁时自动执行。析构函数在类对象销毁时自动执行。一个类只能有一个析构函数,而且析构函数没有参数,即析一个类只能有一个析构函数,而且析构函数没有参数,即析构函数不能重载。构函数不能重载。析构函数的名称是析构函数的名称是“”加上类的名称(中间没有空格)。加上类的名称(中间没有空格)。与构造函数一样,析构函数也没有返回类型。与构造函数一样,析构函数也没有
54、返回类型。析构函数不能被继承。析构函数不能被继承。属性在类模块里是采用如下方式进行声明的,即指定属性在类模块里是采用如下方式进行声明的,即指定变量的访问级别、属性的类型、属性的名称,然后是变量的访问级别、属性的类型、属性的名称,然后是get访访问器或者问器或者set访问器代码块。访问器代码块。 其语法格式如下:其语法格式如下:修饰符修饰符 数据类型数据类型 属性名称属性名称get访问器访问器 set访问器访问器4.8.4 属性属性 【例例4.6】 在在ch4网站中设计一个网页网站中设计一个网页WebForm6,采用属,采用属性方式实现与例性方式实现与例4.4网页相同的功能。网页相同的功能。 解
55、:解:其设计步骤如下:其设计步骤如下: 打开打开ch4网站,选择网站,选择“网站网站|添加新项添加新项”菜单命令,出现菜单命令,出现“添添加新项加新项-ch4”对话框,在中间列表中选择对话框,在中间列表中选择“Web窗体窗体”,将文件名,将文件名称改为称改为WebForm6.aspx,其他保持默认项,单击,其他保持默认项,单击“添加添加”按钮,创按钮,创建一个空的网页。建一个空的网页。设计界面设计界面public class Class3int xh = 0; string xm = ; public int pxh get return xh; set xh = value; public
56、string pxm get return xm; set xm = value; 打开打开Class1.cs文件,输入以下代码:文件,输入以下代码:protected void Button1_Click(object sender, EventArgs e) Class3 st = new Class3(); st.pxh = 101; st.pxm = 王华王华; TextBox1.Text=string.Format(0,st.pxh); TextBox2.Text=st.pxm; 将将WebForm4网页设计界面复制到本网页中,双击网页设计界面复制到本网页中,双击Button1控件,
57、出控件,出现代码编辑窗口,输入以下事件过程代码:现代码编辑窗口,输入以下事件过程代码:运行界面运行界面方法是包含一系列的代码块。从本质上来讲,方法就是方法是包含一系列的代码块。从本质上来讲,方法就是和类相关联的动作,是类的外部界面。用户可以通过外部界和类相关联的动作,是类的外部界面。用户可以通过外部界面来操作类的私有字段。面来操作类的私有字段。1. 方法的定义方法的定义定义方法的基本格式如下:定义方法的基本格式如下: 修饰符修饰符 返回类型返回类型 方法名方法名(参数列表参数列表) /方法的具体实现方法的具体实现; 4.8.5 方法方法2. 方法的返回值方法的返回值 方法可以向调用方返回某一特
58、定的值。如果返回类型不方法可以向调用方返回某一特定的值。如果返回类型不是是void 则该方法可以用则该方法可以用return关键字来返回值,关键字来返回值,return 还可还可以用来停止方法的执行。以用来停止方法的执行。(1)值参数)值参数不含任何修饰符,当利用值向方法传递参数时,编译程不含任何修饰符,当利用值向方法传递参数时,编译程序给实参的值做一份拷贝,并且将此拷贝传递给该方法,被序给实参的值做一份拷贝,并且将此拷贝传递给该方法,被调用的方法不会修改内存中实参的值,所以使用值参数时是调用的方法不会修改内存中实参的值,所以使用值参数时是可以保证实参值的安全性的。可以保证实参值的安全性的。在
59、调用方法时,如果形参的类型是值参数的话,调用的在调用方法时,如果形参的类型是值参数的话,调用的实参的表达式必须保证是正确的值表达式。实参的表达式必须保证是正确的值表达式。3. 方法的参数方法的参数(2)引用型参数)引用型参数以以ref修饰符声明的参数属引用型参数。修饰符声明的参数属引用型参数。引用型参数本身并不创建新的存储空间,而是将实参的引用型参数本身并不创建新的存储空间,而是将实参的存储地址传递给形参。所以对形参的修改会影响原来实参的存储地址传递给形参。所以对形参的修改会影响原来实参的值。值。在调用方法前,引用型实参必须被初始化,同时在调用在调用方法前,引用型实参必须被初始化,同时在调用方
60、法时,对应引用型参数的实参也必须使用方法时,对应引用型参数的实参也必须使用ref修饰。修饰。例如,以下定义的例如,以下定义的MyClass类中的类中的addnum方法使用了一方法使用了一个引用型参数个引用型参数num2:public class MyClassint num=0; public void addnum(int num1,ref int num2) num2=num + num1;以下语句调用以下语句调用addnum方法时实参方法时实参x发生改变:发生改变:int x=0;MyClass s = new MyClass();s.addnum(5, ref x);/x的值变为的值变为5(3)输出参
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民事分家合同协议书范本
- 店铺合伙转让合同协议书
- 赛事直播合作合同协议书
- 合作合同分红协议书
- 纸制品行业市场分析报告2025年
- 物流策划方案优化物流网络布局的策略分析
- 绿色快递策划书范文3
- 2025年中国水果树种植市场竞争及投资策略研究报告
- 2025年进口食品项目投资分析及可行性报告
- 中试线技术调研报告范文
- Windows 7安全配置基线检查指导文件
- 重铬酸钾氧化分光光度法测定酒中乙醇的含量
- 物流管理的应用技术研究和实施
- 软件里程碑计划模板
- (完整版)三菱变频器E740参数设置
- 智慧军油-物联网数字化油库项目整体设计方案
- C919客机机组培训-指示记录
- 喷涂技术培训教材
- 联通创新能力考试复习题库大全-上(单选题汇总)
- 电缆报废拆除方案
- 安全用电(第六版)中职PPT完整全套教学课件
评论
0/150
提交评论