C#程序设计ppt课件(完整版)_第1页
C#程序设计ppt课件(完整版)_第2页
C#程序设计ppt课件(完整版)_第3页
C#程序设计ppt课件(完整版)_第4页
C#程序设计ppt课件(完整版)_第5页
已阅读5页,还剩313页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C#程序设计第3章 C#程序控制 本章任务能够使用if语句编写简单的选择判断程序;能够使用while、dowhile语句编写循环程序;能够使用for语句编写循环程序;能够使用goto语句、continue语句在程序中有条件中断重复执行语句; 任务3.1 编写控制台应用程序判断是否应交个人所得税1、输入的应发工资数和养老金等三金或四金数,2、判断是否应交个人所得税。关键代码1、输入应发工资代码:pay = double.Parse(Console.ReadLine();2、输入养老金代码:money = double.Parse(Console.ReadLine(); 3、判断是否应交个人所得税

2、;if (income 2000) Console.WriteLine(需要交个人所得税!); If语句格式如下:If语句流程图如图所示If(表达式) 语句块 任务3.2 编写Windows窗体应用程序判断是否应交个人所得税。 1、用户在相应文本框中输入的应发工资数和养老金等三金或四金数;2、判断是否应交个人所得税。应发工资数减去养老金后,数据大于2000元;则交税,否则不交税。关键代码1、将文本框中的值赋值给两个变量pay = double.Parse(txtPay .Text ); money = double.Parse(txtMoney .Text );2、判断是否应缴个人所得税; i

3、f (income 2000) MessageBox.Show(需要交个人所得税!); else MessageBox.Show(不需要交个人所得税!); ifelse 语句If(表达式) 语句块1else语句块2结构流程图如图所示格式如下:任务3.3 编写Windows窗体应用程序计算个人所得税和实发工资。1、要求用户输入的数据必须是正数,否则要求用户重新输入;2、计算个人所得税和实发工资。关键代码1、判断应发工资或养老金等是否为负 if (pay 0 | money 0 & income 500 & income = 2000) if语句的嵌套 格式如下:if(表达式1)if(表达式2)语

4、句块1else语句块2else语句块3 ifelse ifelse 语句语句格式如下:if(表达式1)语句块1else if(表达式2)语句块2else语句块n流程图如图所示任务3.4 简易计算器1、在相应文本框输入两个操作数,2、分别实现这两个操作数的加、减、乘、除运算,关键代码op1 = double.Parse(txtOp1.Text);op2 = double.Parse(txtOp2.Text);1、通过double.Parse转换后赋值给变量op1和op2, 2、组合框中选择的运算符赋值给字符串类型变量op。 op = combOperation.SelectedItem.ToSt

5、ring(); 3、使用switch语句进行多项选择判断 switch (op) case : case : case : default : switch语句switch(表达式) case 常数表达式1: 跳转语句 case 常数表达式2: 跳转语句 defalut: 跳转语句语句格式如下:任务3.5 计算某人一年公积金账户余额1、输入的某人工资、公积金交存比例和住房贷款月还款金额,2、计算出他一年公积金账户余额。关键代码计算每月公积金余额并累加:分别使用while结构、dowhile结构以及for循环结构 sum = 0; int i = 1; while (i =12) sum +=2

6、*pay *scale/100-loan; i=i +1; sum = 0; int i = 1; do sum += 2 * pay * scale / 100 - loan; i = i + 1; while (i = 12); sum = 0; for (int i = 1; i = 12;i + ) sum += 2 * pay * scale / 100 - loan; while语句while (表达式)循环体流程图如图所示:格式如下: do while语句格式如下:流程图如图所示 do循环体while (表达式)任务3.6 设计一个计算阶乘和e的指数幂的计算器。 1、单击“n!”

7、按钮计算出阶乘值,2、单击“e”按钮则计算出e的指数幂,求阶乘关键代码 try n = int.Parse(txtResult.Text); catch (System.FormatException) 1、输入为小数时的错误异常处理 for (int t = 1; t = n; t+) m = m * t; 2、求阶乘求幂关键代码1、指数为小数时的错误异常处理 try catch (System.FormatException) 2、溢出引发异常处理Try checked catch (System.OverflowException) for语句 格式如下:流程图如图所示for (表达式1

8、;表达式2;表达式3)循环体任务3.7 使用控制台应用程序计算班级的平均成绩。1、输入三个班每个班四名学生的学生分数,2、再计算每个班级的平均分。Math类可以用来完成一些常用的数学运算 关键代码for (i = 0; i 3; i+) for (j = 0; j 4; j+) Console.Write(第0个学生的成绩:,j+1); score= int.Parse(Console.ReadLine(); sum = sum + score; average =(int )Math .Round( sum / 4); Console.WriteLine(第0个班的平均分为:1分,i+1,a

9、verage); 循环嵌套 格式如下: while (表达式1)while (表达式2)循环体循环嵌套还包括for循环嵌套,do while循环嵌套, for循环再套一层while循环等。跳转语句 1、Break语句可以终止一条多选择语句或迭代语句,使控制流程转到 该语句的下一条语句执行。2、goto语句可以实现无条件跳转,跳转到标签所指定的代码行执行。3、continue语句可以在执行循环体时使程序流程跳过循环体中的剩余 语句,继续执行下一循环。4、return语句终止方法的执行,返回给调用方法。总结程序设计有哪几大基本结构?Break语句和continue语句有什么区别?谢 谢!C#程序设

10、计第4章数组本章任务能声明数组、创建对象数组、正确引用数组元素能初始化一维数组能声明、创建、初始化多维数组并正确引用数组元素能创建、初始化及应用动态数组任务4.1 求学生平均成绩 一维数组及使用1、输入10个学生的C#课程考试成绩2、求出课程平均成绩使用Length来测试数组长度 关键代码1、定义数组float C= new float 10;2、输入成绩for (int i = 0; i C.Length; i+) Ci =float.Parse(Console.ReadLine(); 3、求课程平均成绩for (int i = 0; i C.Length; i+) sum=sum+Ci;

11、average=sum/C.Length; 静态数组 1. 声明数组语法格式为:类型 数组名;例如:int num; /声明int类型数组float arr1; /声明float类型数组int arr2,arr3; /声明两个int数组引用2创建数组对象(1)其形式为: 类型 数组名; 数组名=new类型 数组长度;(2)形式为: 类型 数组名=new类型数组长度;(3)形式为: 数据类型 数组名=初始值列表; 例:下标访问数组各个元素,并输出。 3数组元素的访问形式为:数组名下标 int arr = 1,2,3,5,6,7,8;int index;for (index = 0; index

12、arr.Length; index+)Console.WriteLine(Array0=1, index, arrindex);关键代码例:要求随机产生10个两位数,并按数字从小到大排序。 关键代码1、生成随机数并赋值给数组元素 Random randObj = new Random(); for (i = 0; i N; i+) ai = randObj.Next(10, 99); 2、对十个元素按从小到大进行排序 for (i = 0; i N - 1; i+) min = ai; min_i = i; for (j = i + 1; j aj) min = aj; min_i = j;

13、if (min_i != i) t = amin_i; amin_i = ai; ai = t; 4数组元素赋值形式为:数组名下标=值;例如:arr0=1;arr1=10;Array类Array类方法的使用。 关键代码Console.WriteLine(值2是元素arr0的值, Array.IndexOf(arr, 2);Array.Sort(arr);Array.Reverse(arr);Array.Clear(arr, 2, 2);Array类的属性 名称说明Length 获得一个 32 位整数,该整数表示 Array 的所有维数中元素的总数。LongLength 获得一个 64 位整数,

14、该整数表示 Array 的所有维数中元素的总数。Rank 获取 Array 的秩(维数)。Array类的方法 名称说明Clear( ) 将Array中从 index开始的length个元素设置为零、false 等,具体取决于元素类型。Copy()从第一个元素开始复制sourceArray中的length个元素,将它们粘贴到destinationArray中。CopyTo()将当前一维数组的所有元素复制到指定的一维数组Array中,位置从 index开始。GetLongLength ()获取一个 64 位整数,该整数表示 Array 的指定维中的元素数。 Array类方法 名称说明GetLowe

15、rBound() 获取 Array 中指定维度的下限。GetUpperBound()获取 Array 的指定维度的上限。Sort() 对一维 Array 对象中的元素进行排序。GetLength()获取一个 32 位整数,该整数表示 Array 的指定维中的元素数。dimension指的是维度。IndexOf()从Array的star index开始,搜索count个元素,返回第一个与count匹配的数组索引。Reverse()反转一维 Array 或部分 Array 中元素的顺序。动态数组例:创建、初始化ArrayList数组,并输出数组元素的个数。 关键代码System.Collectio

16、ns.ArrayList al=new System.Collections.ArrayList();al.Add(安徽);al.Add(合肥);al.Add(芜湖);al.Add(六安);Console.WriteLine(al有0元素:, al.Count);ArrayList类的属性和方法 属性说明Count 获取 ArrayList 中实际包含的元素个数。 方法 说明Add将对象添加到 ArrayList 的结尾处。Clear从 ArrayList 中移除所有元素。Insert将元素插入 ArrayList 的指定索引处。Remove从 ArrayList 中移除特定对象的第一个匹配项

17、。Sort对整个 ArrayList 中的元素进行排序。foreach语句 例:应用foreach语句遍历ArrayList数组 格式:foreach(数据类型符 变量名 in 数组或集合)循环体;关键代码System.Collections.ArrayList al = new System.Collections.ArrayList();1、创建一个新的ArrayList对象 2、输出myList数组元素 foreach ( Object obj in myList )Console.WriteLine( 0 , obj );字符串的处理属性说明Length获取字符串中字符的个数。方法说明

18、ToCharArray()获得一个可写的char数组。trim()删除多余空格。 ToLower()和ToUpper()把指定字符串转换为小写和大写形式。 任务4.2 计算学生多门课程的平均成绩 多维数组及使用设计一个分别求出某个班级每门课程平均成绩的程序。多维数组的声明、创建和初始化 关键代码 double, score=new double5,475,78,90,87,68,78,80,81,68,65,71,68,72,79,76,80.5,86,84,82,90; double course = new double4; for (int i = 0; i 5; i+) for (in

19、t j = 0; j 4; j+) Console.Write(0 , scorei, j); Console.WriteLine(); 多维数组的声明、创建和初始化 1.多维数组的创建类型,数组名=new类型表达式1,表达式2,或 数组名=new类型表达式1,表达式2,2.多维数组的初始化。(2)格式如下: 数组名=new类型,0行数值,1行数值,;(1)格式如下: 数组名=new类型,初值表;例:求一个3行3列二维数组两条对角线元素之和。 关键代码 for (int i = 0; i 3; i+) for (int j = 0; j 3; j+) if (i = j) sum1 += ar

20、ri, j; if (i + j = 2) sum2 += arri, j; 1、创建数组int , arr = new int3, 310,20,30,40,50,60,70,80,90;2、分别计算两条对角线元素之和总结一维数组的定义,初始化及其引用。多位数组的定义,初始化及其引用。谢 谢!C#程序设计第五章面向对象程序设计 本章任务能正确理解类与对象的概念能使用方法能正确在方法之间传递信息任务5.1计算长方形周长和面积任务描述:输入长方形的长和宽单击“计算”按钮,显示长方形面积和周长;单击“重置”按钮,清空文本框。处理“计算”、 “重置”按钮的Click事件需要定义rectangle类实

21、例化对象rec1分四步实现具体功能 任务5.1计算长方形周长和面积任务解决方案:(1)创建名为circumArea1的Windows应用程序项目;(2)添加控件并设置属性。(3)编写程序代码 (4)测试程序 关键代码回顾 /创建对象 rectangle rec1 = new rectangle(); /输入长存入字段中 rec1.length = double.Parse(txtLength.Text); /输入的宽存入字段中 rec1.width = double.Parse(txtWidth.Text); /计算面积 double area = rec1.length * rec1.wid

22、th; /计算周长 double perimeter = 2*(rec1.length + rec1.width); 类和对象 类:相对对象而言,类似于蓝图包含方法和数据对象:是类的实例使用关键字 new 创建对象具有行为对象厨房起居室浴室书房饭厅储藏室门廊类课堂讨论先有对象还是先有类?类是对象的模板,使用对象前必须先创建类定义类访问修饰符 class 类名 访问修饰符常量声明; 访问修饰符字段声明; 访问修饰符方法声明; 访问修饰符属性声明; 访问修饰符构造函数声明; 访问修饰符析构函数声明; 说明:使用类声明可以创建新的类。类声明以一个声明头开始,其组成方式如下:先是指定类的特性或者修饰符

23、,后跟类的名字,它由一组包含在大括号()中的成员声明组成。 例如:定义rectangle 类: public class rectangle /定义类 public double length; /定义字段 public double width; /定义字段 类的修饰符public(公有类):表示外界可以不受限制地对该类访问;private(私有类):表示只有本类才能访问;new(新建类):表示类由基类中继承而来、与基类中同名的成员;protected(保护类):表示只能对其所在类和从该类派生的子类进行访问;internal(内部类): 表示仅能访问本程序;abstract(抽象类):说明该

24、类可以用来做其他类的基类,可以继承但不能单独使用;Scaled(密封类):说明该类不能作为其他类的基类,不能派生新的类;省略类修饰符则表示为private 。1将类实例化为对象对象2类成员的访问 = new ();例如:rectangle rec1= new rectangle();对象名.数据例如:rec1.length;总结对类名推荐使用Pascal命名规范:每个单词的首字母要大写。创建并初始化对象属性 访问修饰符 class ; = new ();定义类类成员在类的定义中,包含有各种类成员,概括起来类的成员有两种:存储数据的成员与操作数据的成员。存储数据的成员叫“字段”,操作数据成员又有

25、很多种。 “字段”是类定义中的数据,也叫类的变量。在C#中,字段以图标 表示。 “属性”用于读取和写入“字段”值。在C#中,属性以图标 表示 。“方法”实质上就是函数,通常用于对字段进行计算和操作,即对类中的数据进行操作,以实现特定的功能。在C#中,方法以图标表示,事件方法以图标 表示。“构造函数”是在用类声明对象时,完成对象字段的初始化工作。 字段为类中的成员,是表示与对象或类关联的变量,字段常定义的类型有public(公有型)、private(私有型)等。 字段例如:class triangle /定义类public string name ; /字段成员public double sid

26、eA; /字段成员public double sideB; /字段成员public double sideC; /字段成员 加上static保留字为静态成员,没有这个保留字的为非静态成员。 区别: 静态成员属于类所有,非静态成员属于类的对象所有,因此访问静态成员只能由类来访问,而访问非静态成员必须由对象进行访问。静态字段静态字段的访问格式:类名.静态成员名非静态字段的访问格式:对象名. 非静态成员名class Teacher public string number=1001; /非静态字段 public string name=张宁; /非静态字段 public static double

27、pay=3650.5; /静态字段static void Main(string args) Teacher t1 = new Teacher(); string str = 职工编号: + t1.number + ,姓名: + + ,工资: + Teacher.pay.ToString(); Console.WriteLine(str ); 例如:number和name为非静态字段, pay为静态字段,因此访问前面两个字段用对象调用t1.number和,访问最后一个字段用类来调用Teacher.pay。 在任务5.1的基础上自定义方法Area()计算长方形面积 自定义方法Perimeter(

28、)计算长方形周长 修改“计算” 按钮的Click事件任务5.2 定义方法计算长方形周长和面积代码/自定义方法Area()、 Perimeter() public double Area() /定义计算长方形面积的方法 double a = length * width; return a; public double Perimeter() /定义计算长方形周长的方法 double len=2*(length +width ); return len; 返回面积代码/修改“计算”按钮,在其Click事件处理程序 private void btnCalculate_Click(object se

29、nder, EventArgs e) /调用recArea方法计算面积 double s = rec1.Area(); /调用recPerimeter方法计算周长 double l=rec1 .Perimeter(); lblResult.Text = 长方形面积为: + s.ToString() + 平方厘米,+周长为:+l .ToString ()+厘米; 类的方法表示一类事物所具备的动作,在C#中就是类或对象为完成一项任务而执行的指令序列。在编写程序中使用方法主要是便于修改、增加可读性,方法可以重用和封装。方法 编写方法编写方法前的准备工作:该方法主要是实现什么功能?根据功能起一个容易记

30、的方法名。实现该方法需要用户提供什么数据?确定方法的参数。如计算n!,就需要给该方法传入一个整数n。该方法是实现操作或是计算?若是操作,方法的返回类型可以定为void若是计算,需要确定需要给调用者返回一个什么类型的结果。如求n!需要给调用者返回一个长整型的阶乘值。方法的最后一个执行语句应当是: (若是操作可以省略)return 表达式;编写方法编写方法前的准备工作:该方法可以给哪些人使用:public:所有人都可以使用private:只能给本类使用protected:可以给本类和派生类使用方法要写在类(class)中。编写方法方法定义的格式方法修饰符返回值类型方法名(形参列表)方法体方法修饰符

31、是可选的。它可以是public, private, protected 等之一。默认为private。方法名要符合标识符的命名规则。参数的声明和变量一样,即 类型名 参数名 的格式,用于接收调用者传过来的数值,也相当于方法的局部变量。多个参数之间用逗号分隔。任务 5.3 根据圆的半径计算圆面积任务描述:输入圆半径单击“计算”按钮,显示圆面积。需要定义Circle类自定义方法Area()需要根据参数r计算面积任务 5.3 根据圆的半径计算圆面积代码/定义Circle类 public class Circle public const double PI = 3.14159; public dou

32、ble r; public double Area(double r) this.r = r; /this.r表示类的字段,r表示方法Area的形参 double s = PI * this.r * this.r; return s; 返回面积传入半径代码/修改“计算”按钮,在其Click事件处理程序 private void btnCompute_Click(object sender, EventArgs e) Circle circle1 = new Circle(); double r = double.Parse(txtR.Text ); /将实参r中的值传递给方法area中的形参r

33、 double s = circle1.Area(r); string res = 园半径是: + circle1.r + 厘米,面积是: + s.ToString() + 平方厘米; txtResult.Text = res; 方法参数按值传递 public double Area (double r)double s = circle1.Area(r); 方法的声明方法的调用调用者area方法11.511.5使用以下代码,调用上述方法,结果是什么?public double Area(double r, double s) this.r = r; s = PI * this.r * thi

34、s.r; return s; double a = 0; Circle circle1 = new Circle(); double r = double.Parse(txtR.Text ); double s = circle1.Area(r, a); string res = 园半径是: + circle1.r + 厘米,面积是: + s.ToString() + 平方厘米, + a的值是: + a; txtResult.Text = res; 方法参数按值传递使用以下代码,调用上述方法,结果是什么?public double Area(double r, ref double s) th

35、is.r = r; s = PI * this.r * this.r; return s; double a = 0; Circle circle1 = new Circle(); double r = double.Parse(txtR.Text ); double s = circle1.Area(r, ref a); string res = 园半径是: + circle1.r + 厘米,面积是: + s.ToString() + 平方厘米, + a的值是: + a; txtResult.Text = res; 通过引用传递参数public double area(double r, o

36、ut double s) this.r = r; s = PI * this.r * this.r; return s; Circle circle1 = new Circle(); double r = double.Parse(txtR.Text ); double s = circle1.area(r, out a); string res = 园半径是: + circle1.r + 厘米,面积是: + s.ToString() + 平方厘米, + a的值是: + a;通过引用传递参数编译器通过识别方法的签名来区分调用哪个方法。方法的签名包括方法名、参数的类型、个数和顺序对以下重载的方法

37、,编译器能够正确识别:对以下方法,编译器无法识别,会报错:方法的重载public void Foo(int a, float b)public void Foo(float a, int b)public void Foo(int a, int b)public void Foo(int b, int a)例如:class Compute public void print(int i) int s = i * i; Console.WriteLine(s); return; public void print(int i, int j) int s = i * j; Console.Writ

38、eLine(s ); return ; 方法的重载任务 5.4 求三角形周长和面积 任务描述:输入输入三角形的三条边长度判断能否构成三角形单击“计算”按钮,显示三角形 周长和面积类、成员访问规则:命名空间总是默认的public类总是默认的public类成员默认为private对于一个类成员只能使用一个访问修饰符。private internal尽管是两个单词,但它是单个访问修饰符。成员的作用域永远不超出包含它的类。任务 5.4 求三角形周长和面积定义Triangle 类,并且将字段成员sideA、sideB、sideC定义成私有类型 自定义方法Setside()和Getside (),来存取字

39、段自定义方法test(),测试任意两条边之和是否大于第三条边 自定义方法triCir()和triArea(),计算三角形的周长和面积。任务 5.4 求三角形周长和面积代码/定义Setside()方法 public void Setside(double paraA, double paraB, double paraC) this.sideA = paraA; this.sideB = paraB; this.sideC = paraC; /定义Getside ()方法 public string Getside() string txt = 三角形三边长分别为: + sideA + 厘米、

40、+ sideB + 厘米和 + sideC + 厘米。; return txt; 无返回传入三边长代码/定义test ()方法测试能否构成三角形 public bool test( ) if (sideA + sideB sideC) & (sideB + sideC sideA) & (sideA + sideC sideC) return true; else return false; 课堂讨论这样的设计对于使用者来说,不方便了。因为他要分别记住2个方法,哪个方法是设置值的,哪个方法是获取值的。有没有一种途径,它可以让使用者像使用公共的字段一样方便,又能让设计者能够进行安全地检查?使用属

41、性任务 5.5 使用属性求三角形周长和面积 任务描述:输入输入三角形的三条边长度判断能否构成三角形单击“计算”按钮,显示三角形 周长和面积修改任务5.4定义属性来存取字段任务 5.5 使用属性求三角形周长和面积 属性属性,从外部(类的使用者)来看,类似于类的字段。从内部(类的作者)来看,类似于类的方法。class Triangle public double SideA /定义SideA属性 get return sideA; set sideA = value; get访问器set访问器属性是一种用于访问类或对象性质的成员,它与字段不同的是属性不表示存储位置,不直接操作类的数据内容,而是通过

42、访问器进行访问。使用属性可以像使用公共数据成员一样,这样既可以使类中数据被轻松访问,又可以避免随意访问类中公共数据而出现的安全性问题,提高了程序安全可靠性,充分体现了对象的封装性。属性 如果只提供 get访问器, 那么这个属性是只读的。如果只提供 set访问器,那么这个属性是只写的。建议:将所有字段都定义为private。如果字段需要公开,请使用属性将其公开。属性属性访问方法与类的字段成员访问方法一样,根据属性声明时是否为静态有下列两种访问形式。 非静态属性成员访问:对象名.属性名 静态属性成员访问:类名.属性名属性使用属性使用 /创建对象 Triangle tri1 = new Triang

43、le(); s1 = double.Parse(txtSideA.Text); s2 = double.Parse(txtSideB.Text); s3 = double.Parse(txtSideC.Text); /使用属性set访问器写入数据 tri1.SideA = s1; tri1.SideB = s2; tri1.SideC = s3; /使用属性get访问器读取数据 txtRes.Text = 三角形三边长分别为:+ tri1.SideA + 厘米、 + tri1.SideB + 厘米和+ tri1.SideC + 厘米。; 任务5.6 使用构造函数初始化三角形边长任务描述:使用构

44、造函数初始化三角形边长修改任务5.5中定义的Triangle类,添加构造函数用以完成初始化 任务5.6 使用构造函数初始化三角形边长代码 class Triangle public Triangle() /系统默认构造函数 public Triangle(double sA) /构造函数 sideA = sideB = sideC = sA; 没有返回值与类同名构造函数是特殊的方法,用来实现对象的初始化与类同名没有返回值构造函数用于,当实例化一个对象时,会对类的成员进行初始化。构造函数如果我们想使对象初始化时,可以按照设计者的预期来进行,就需要自己书写构造函数的代码。若上述任务5.6中的Tri

45、angle类,我们想初始化的三边长 是0,构造函数可以定义为: class Triangle public Triangle(double sA) /构造函数 sideA = sideB = sideC = sA; Triangle tri1 = new Triangle(0); 构造函数的定义 class Triangle private double sideA; private double sideB; private double sideC; public Triangle() /系统默认构造函数 public Triangle(double sA) /构造函数 sideA = s

46、ideB = sideC = sA; 构造函数的重载当没有构造函数时,.NET会提供一个默认空的构造函数。如任务5.6中的Triangle类,会有一个默认构造函数: public Triangle() /系统默认构造函数 编译器只会当类中没有构造函数时,提供一个默认构造函数。但是若提供了其它版本的构造函数,而没有提供默认构造函数,将不能调用默认构造函数。 构造函数的重载例如在任务5.6中没有定义 public Triangle() 就不能这样去实例化对象: Triangle tri1 = new Triangle(); 构造函数的重载析构函数析构函数也是类的特殊方法,主要用于释放类的实例。析构

47、函数的名字与类名相同,但它的前面需要加一个“”符号;与构造函数不同的是析构函数不能带参数,也没有返回值;当撤消对象时,自动调用析构函数;析构函数不能被继承,也不能被重载。 析构函数声明格式: 类名称() 语句块 例如:class Round public Round() /构造函数 public Round (int r) this.r = r; /构造函数重载 Round() /析构函数 Console.WriteLine(Round () is release); 任务5.7 计算圆面积和周长、圆柱体面积和体积 任务描述:设计计算器界面通过多级继承,完成圆面积和周长的计算、圆柱体面积和体积

48、的计算 。将圆心坐标定义为基类,在基类中包含坐标X属性和Y属性,定义Print方法用来输出圆心坐标位置 继承基类建立圆派生类,新增圆的半径R属性,定义求圆面积和周长的方法,并重写Print方法用来输出圆心坐标、圆面积和周长 将圆作为基类建立圆柱派生类,新增圆柱体的高度Height这一属性,重写求面积方法,改为求圆柱表面积,定义求体积的方法,重写Print方法用来输出圆柱体表面积和体积等 任务 5.3 根据圆的半径计算圆面积定义基类 public class Centre protected int x,y; public Centre() public Centre(int myx,int m

49、yy) x = myx; y = myy; public virtual string Print() string str = 圆心坐标:( + X.ToString() + , + Y.ToString() + ); return str; 构造函数虚拟方法 定义派生类 public class Round:Centre /定义派生类 private int r; public Round() public Round(int myx,int myy,int myr):base(myx ,myy ) r = myr; public override string Print() strin

50、g str = base.Print ()+rn+圆的面积:+Area ().ToString ()+rn+圆的周长:+Perimeter ().ToString (); return str; 方法覆盖从派生类中访问基类的属性和方法成员 面向对象编程的重要特性有:封装、继承和多态。继承性是指在类之间建立一种关系,即在基类的基础上建立新的类称为派生类,使得新定义的派生类可以继承基类的成员,还可以定义新的成员,建立起类的新层次。多态性是指在类中定义了功能不同但名称相同的方法或属性,通过在类中声明虚拟方法和属性,在派生类中重写这些方法成员的实现,使得调用名称相同的方法成员所执行的操作可能不同,展示

51、出类的多态性。继承与多态派生类派生类声明格式:Class 派生类名:基类名语句块1派生类与基类派生类是从基类中继承成员,并且添加新成员或重新定义成员,一般称被继承的类为基类或父类,继承后产生的新类称为派生类或子类。基类中构造函数和析构函数不能被派生类继承,其它成员都能被继承。派生类2基类成员修饰符基类成员修饰符可为public、protected、private其含义如下:public:访问该成员不受任何限制,可以被基类和派生类访问,也可以被外部代码访问。protected:访问该成员仅限于派生类,基类和外部代码都不能访问。private:该成员仅限于包含它的类,不能被派生类和外部代码访问。派

52、生类3Base关键字的作用。Base关键字是用于从派生类中访问基类的成员。有两种基本用法:(1) 指定创建派生类实例时应调用的基类构造函数,在派生类中显式调用直接基类构造函数,完成对基类成员的初始化工作;public User ( string myid,string name,string sex, string myunit,string mypurview,string mytel):base(name ,sex ) id = myid;unit= myunit; purview = mypurview; tel = mytel; 派生类(2)在派生类中访问基类成员。 Base.方法名或

53、Base.属性名例如:在项目任务5.7的User派生类中用base调用Print方法。public new string Print() string str2 = 职工号:+id+base.Print() + 所在单位: + unit + 初始密码: + pwd+ 用户权限: + purview+ 联系电话: + tel; return str2; 派生类4new修饰符的作用。 若派生类中的成员和基类的成员使用了相同名称、相同参数和类型时,系统编译时会发出警告,但不会发生错误。这时可以用new修饰符显式地隐藏从基类继承的成员。 虚拟方法和重写方法1虚拟方法派生类继承了基类方法,如果在派生类中

54、需要用到与基类相同方法名,但方法执行的操作内容不同时,则需要“重写”它们,即重写方法成员的实现。在基类中声明方法时用virtual关键字来修饰,表示此方法为虚拟方法,用virtual声明的方法可以在派生类中重写。虚拟方法声明中不能包含static、abstract、override修饰符。在声明方法时没有用virtual关键字的,该方法为非虚拟方法。非虚拟方法的执行是不变的,不管方法在它声明的类的实例还是在派生类的实例中被调用,执行都是相同的。虚拟方法和重写方法2重写方法重写方法就是在派生类中用相同的名称重写基类继承的虚拟方法,也就是在派生类中重新定义此虚拟方法的实现,在声明方法时用overr

55、ide关键字来修饰,表示该方法为重写方法。虚拟方法的执行可以被派生类重写后改变,具体实现时要求重写方法的方法名、返回值类型、参数表中的参数个数、类型顺序都必须与基类中的虚拟方法完全一致。在方法声明中不能有new、static、virtual修饰符。3多态性 抽象类和抽象成员1抽象类在类声明中用abstract关键字进行修饰,表明此类只能是其他类的基类,称为抽象类。在类中含有一个或一个以上的抽象成员的类必须声明为抽象类,抽象类也可以包含非抽象类成员,当类中一个抽象类成员都没有的情况下,也可以将该类声明为抽象类。抽象类是为了提供一个比较合适的类,由此派生出其他的类,它不能实例化,而是在派生类中实现

56、。2抽象成员抽象类中包含的抽象成员可以是抽象属性和抽象方法,声明时都用abstract关键字进行修饰,表示该属性和方法未实现,其中抽象方法没有方法体,但必须声明,在它的派生类中通过重写提供实现。谢 谢!C#程序设计第六章WinForm应用程序设计本章任务能正确使用控件设计界面能正确编写事件处理程序代码能创建菜单、窗口和多文档界面(MDI)任务6.1 “学生信息管理系统”项目主界面的设计 用户可以使用菜单和工具栏分别实现各项功能任务6.1 “学生信息管理系统”项目主界面的设计 处理菜单响应、工具栏响应事件需要菜单栏(menuStrip)控件、工具栏(ToolStrip)控件和状态栏(status

57、Strip)控件 分三步实现主界面的设计 1、设置窗体frmMain,作为系统的主界面 2、使用菜单栏(menuStrip)控件设计系统主菜单3、使用工具栏(ToolStrip)控件设计系统工具栏4、使用状态栏(statusStrip)控件设计系统状态栏将窗体命名为frmMain作为系统的主界面 属性说明Form1NamefrmMain Text学生信息管理系统 Icon 添加界面图标Size1024, 768StartpositonCenterScreen添加菜单栏添加菜单栏(menuStrip)控件,到frmMain窗体中,命名为msMain 关键代码回顾/编写“退出系统”菜单项Click

58、事件响应程序代码 private void tsmiQuit_Click(object sender, EventArgs e) Application.Exit(); 添加工具栏添加工具栏(ToolStrip)控件,到frmMain窗体中,命名为tsMain 关键代码回顾/编写工具栏 “退出”按钮Click事件响应程序代码 private void tsbntQuit_Click(object sender, EventArgs e) tsmiQuit_Click(sender, e) 添加状态栏添加状态栏(statusStrip) ,到frmMain窗体中,命名为ssMain menuSt

59、rip的常用属性 属性说明Name 控件名称,统一用ms+菜单名 Text 菜单项的文本标题 ShortcutKeys 设置与菜单项关联的快捷键 ShowShortcutKeys 显示与菜单项关联的快捷键 ToolStripMenuItem控件常用属性 属性说明Checked表示菜单是否被选中 DropDownItems返回一个项集合,用于菜单项相关的下拉菜单CheckOnClick根据Checked属性显示菜单是否被选中Enabled设置菜单是否可用 ToolStripMenuItem主要事件 事件说明Click 单击菜单项引发该事件CheckedChanged 单击带有CheckOnCli

60、ck属性的菜单项时,引发这个事件 任务6.2 “学生信息管理系统”项目登陆界面的设计 检查登陆的用户名和密码是否为空 如果用户名和密码不为空,则跳转到“学生信息管理系统”主界面 任务6.2 “学生信息管理系统”项目登陆界面的设计当用户单击“取消”按钮时,触发取消按钮的Click事件,执行btnCancel_Click事件处理程序,调用Application.Exit()退出整个应用程序 当用户单击“确定”按钮时,执行btnLogin_Click事件处理程序,首先调用自定义方法TestInput(),当验证用户已经输入了用户名和密码信息才能调用系统的主界面frmMain,并关闭登陆窗口 关键代码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论