《面向对象的高级程序设计学习教案.pptx》由会员分享,可在线阅读,更多相关《面向对象的高级程序设计学习教案.pptx(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、会计学1面向对象的高级面向对象的高级(goj)程序设计程序设计第一页,共50页。5.1.1 静态静态(jngti)字段字段有时我们希望某些特定的数据在内存中只有一份,并且可以被类的所有实例对象所共享,就可以使用静态字段。静态字段是被static关键字修改的字段,它不属于任何(rnh)对象,只属于类,而且只能通过“类名.静态字段名”的方式来访问。第1页/共50页第二页,共50页。用static修饰的属性被称为静态属性,静态属性可以读写静态字段的值,并保证静态字段值的合法性。在调用(dioyng)静态属性时需要使用“类名.静态属性名”的方式。5.1.2 静态静态(jngti)属性属性第2页/共50
2、页第三页,共50页。被static关键字修饰(xish)的方法被称为静态方法。同其他静态成员类似,静态方法使用“类名.方法名”的方式来访问。5.1.2 静态方法静态方法第3页/共50页第四页,共50页。静态方法静态方法实例方法实例方法static 关键字不需要static关键字使用类名调用使用对象调用可以访问静态成员可以访问静态成员不可以直接访问实例成员可以直接访问实例成员调用前初始化实例化对象时初始化第4页/共50页第五页,共50页。静态类:当类中的成员静态类:当类中的成员(chngyun)全部是静态成员全部是静态成员(chngyun)时,就可以把这个类声明为静态类。声明时,就可以把这个类声
3、明为静态类。声明静态类时需要在静态类时需要在class关键字之前加上关键字之前加上static关键字。关键字。静态构造方法:静态构造方法的作用是初始化静态成静态构造方法:静态构造方法的作用是初始化静态成员。一个类只能有一个静态构造方法,该静态构造方员。一个类只能有一个静态构造方法,该静态构造方法没有法没有(mi yu)任何修饰符也没有任何修饰符也没有(mi yu)参数,参数,可以被定义在静态类或非静态类中可以被定义在静态类或非静态类中第5页/共50页第六页,共50页。继承(继承(inheritance)是指从一个类从它的父类中继承除构造函数以外的)是指从一个类从它的父类中继承除构造函数以外的所
4、有数据的定义和功能。继承能够提高代码的可重用性。通过继承子类将所有数据的定义和功能。继承能够提高代码的可重用性。通过继承子类将获取获取(huq)父类已有的非私有的成员变量和成员方法,而不必重新编写。父类已有的非私有的成员变量和成员方法,而不必重新编写。 在在C#中被继承的类称为基类或者父类,继承了基类的类称为派生类或中被继承的类称为基类或者父类,继承了基类的类称为派生类或子类。类之间的继承关系是通过子类。类之间的继承关系是通过“冒号冒号”实现的,实现的,“冒号冒号”的前面是派生的前面是派生类,后面是基类。语法格式如下所示。类,后面是基类。语法格式如下所示。类修饰符类修饰符 class 派生类名
5、派生类名:基类名基类名 类的成员;类的成员;第6页/共50页第七页,共50页。第7页/共50页第八页,共50页。Person类类姓名姓名年龄年龄SayHi()()Eat()()Student类类爱好爱好学号学号Study()()SayHi()()Teacher类类薪水薪水工号工号ReadyCourser()()SayHi()()第8页/共50页第九页,共50页。n派生类中如果(rgu)声明了与基类同名的成员,可以使用new 修饰符对基类中同名的成员进行覆盖(隐藏),来完成属于自己的实现。n如果(rgu)在一个类的前面添加seal关键字则这个类称之为密封类,密封类不能作为其他类的基类。第9页/共
6、50页第十页,共50页。第10页/共50页第十一页,共50页。第11页/共50页第十二页,共50页。n类的多态性:说简单一点就是同一个方法具有不同的实现n类的多态包括静态的多态(函数或者方法的重载)和动态的多态。第12页/共50页第十三页,共50页。个方法Talk(),则其相关测试代码为: Father father; Son son= new Son(); father = son; father.Say(); if (father is Son) (Son)father).Talk(); 第13页/共50页第十四页,共50页。Animal类Run()Cry()Dog类Run()Bird类R
7、un()Person类Run() static void TestRun(Animal animal) animal.Run(); 第14页/共50页第十五页,共50页。第15页/共50页第十六页,共50页。n public override void Cry()n n代码。代码。n 第16页/共50页第十七页,共50页。Vehicle类类string nameVirtual void Move()Train类类override void Move()Car类类override void Move()说明:通过动态的多态不能调用说明:通过动态的多态不能调用(dioyng)子类中新增加的方法。子
8、类中新增加的方法。第17页/共50页第十八页,共50页。n n 说明:抽象方法(fngf)没有方法(fngf)体采用抽象方法实现例5.3第18页/共50页第十九页,共50页。Shape抽象类抽象类Color线条颜色Size线条宽度Display()Draw()抽象方法Ecllipse类类lr 长轴sr短轴x圆心xy圆心yDraw()Circle类类r半径Draw()第19页/共50页第二十页,共50页。第20页/共50页第二十一页,共50页。n如果(rgu)父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。5.4.4 5.4.4 实现多态的手段实现多态的手段(shudu
9、n)(shudun)(动态的多态)(动态的多态)第21页/共50页第二十二页,共50页。class Bird : Flyble public void Fly() Console.WriteLine(The bird is flying.); class SuperPerson : Flyble public void Fly() Console.WriteLine(the superPerson is flying.); interface Flyble void Fly(); 第22页/共50页第二十三页,共50页。第23页/共50页第二十四页,共50页。第24页/共50页第二十五页,共5
10、0页。例5.4创建一个接口IShape ,然后创建继承该接口的派生类Rectangle,和Circle通过此派生类实现了计算周长(zhu chn)和面积的方法。IShape接口接口GetArea()GetPerimeter()Circle类类rGetArea()GetPerimeter()Rectangle类类heightweightGetArea()GetPerimeter()第25页/共50页第二十六页,共50页。IPeople接口接口NameSexITeacher接口接口Teach()IStudent接口接口Study()Program类类NameSexTeach()Study()第26
11、页/共50页第二十七页,共50页。虚方法虚方法抽象方法抽象方法接口接口用virtual修饰用abstract修饰方法体不需要用任何修饰符,所有的成员都为public要有一个方法体,哪怕是一个分号不允许有方法体不允许有方法体可以被子类重写重写override必须被子类重写重写override必须被子类实现被子类实现但不必加override第27页/共50页第二十八页,共50页。得到不同的响应。第28页/共50页第二十九页,共50页。和队列( Queue )。第29页/共50页第三十页,共50页。第30页/共50页第三十一页,共50页。属性属性说明说明Capacity获取或设置集合可包含的元素数,
12、默认容量是16。CountCount获取集合中实际包含的元素数。方法方法说明说明AddAdd将元素添加到集合的结尾处。AddRangeAddRange将多个元素添加到集合的结尾处。BinarySearch使用对分检索算法在已排序的 集合中查找特定元素。ClearClear从集合中移除所有元素。CopyTo将 ArrayList 或它的一部分复制到一维数组中。IndexOf返回某个值从零开始的第一个匹配项的索引。Insert将元素插入到集合的指定索引处。LastIndexOf返回某个值从零开始的最后一个匹配项的索引。RemoveRemove从集合中移除特定值的第一个匹配项。RemoveAtRem
13、oveAt移除集合中指定索引处的元素。Reverse将集合中元素的顺序反转。Sort对集合或它的一部分中的元素进行排序。TrimToSize将集合的容量设置为元素的实际数目。第31页/共50页第三十二页,共50页。第32页/共50页第三十三页,共50页。用索引访问哈希表中的值,但能通过健来访问哈希表中的值第33页/共50页第三十四页,共50页。属性属性说明说明CountCount获取包含在Hashtable中的键/值对的数目。KeysKeys获取Hashtable中键的ICollection。Values获取Hashtable中值的 ICollection。方法方法说明说明AddAdd将带有指
14、定键和值的元素添加到Hashtable中。ContainsKeyContainsKey确定 Hashtable 是否包含特定键。RemoveRemove从Hashtable中移除带有指定键的元素。第34页/共50页第三十五页,共50页。postalcode)/删除指定邮编对应的元素npublic void PrintAllPlace()/输出速查薄中所有的地名第35页/共50页第三十六页,共50页。表示泛型集合的元素类型表示泛型集合的元素类型,泛型所在的命名空间为泛型所在的命名空间为System.Collections.Generic。nList的用法与的用法与ArrayList用法用法基本相
15、同、基本相同、 Dictionary用用法与法与HashTable用法基本相同用法基本相同第36页/共50页第三十七页,共50页。Teacher类类agenamesubject第37页/共50页第三十八页,共50页。 程序(chngx)中的异常是指当程序(chngx)执行时遇到错误或者意外行为,使用异常处理语句就可以精确地捕捉这些异常,C#中的异常处理语句主要包括两种:try-catch-finally语句和throw语句。try-catch-finally语句 在程序(chngx)执行过程中,异常情况时有发生,例如在读取远程数据库时,可能会发生网络断开、数据库服务器负载过大、数据结构错误等异
16、常情况。那么连接服务器的代码就需要写在try语句块中,一旦在连接和操作数据库中发生异常,catch就会捕获到相关信息。无论是否发生数据库连接异常,都会执行finally语句块中的断开数据库连接的代码。第38页/共50页第三十九页,共50页。try-catch-finally语句用法相当(xingdng)灵活。其语法结构如下:try/程序代码 /e是异常处理类Exception的实例对象,通过该类可以获取异常的详细信息catch(Exception e) /错误代码处理finally/程序代码 / 程序代码5.7 异常异常(ychng)处理处理 其中可能有异常。一旦(ydn)发现异常,则立即跳到
17、catch执行。否则不会执行catch里面的内容。除非try里面执行代码发生了异常,否则这里的代码不会执行不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally。顺序执行最后代码第39页/共50页第四十页,共50页。例5-8下面是使用try-catch-finally语句实现(shxin)异常情况的捕获。namespace t_c_f_test class Program static void Main(string args) int i = 0; string s = i love ASP.NET; t
18、ry i = int.Parse(s); catch (Exception e) Console.WriteLine(类型转换失败: + e.Message); finally Console.WriteLine(转换后结果:0, i); Console.ReadKey(); 第40页/共50页第四十一页,共50页。throw语句语句throw语句用于将程序代码中的异常抛出,并让调用这个方法语句用于将程序代码中的异常抛出,并让调用这个方法的程序进行捕捉的程序进行捕捉(bzhu)和处理,这样就减少了将异常立即和处理,这样就减少了将异常立即输出并显示的麻烦。输出并显示的麻烦。throw语句语法格式
19、为:语句语法格式为: throw表达式表达式;5.7 异常异常(ychng)处理处理 第41页/共50页第四十二页,共50页。例5-9下面是使用(shyng)try-catch语句和throw语句实现异常情况的捕获和抛出。namespace throw_test class Program static void Main(string args) Console.WriteLine(请输入一个数:); double i = Double.Parse(Console.ReadLine(); /强制转换成double型 double s, j=4.56; try if (i = 0) throw
20、 new DivideByZeroException(除数不能为0!); /抛出异常 s = j / i; catch (DivideByZeroException e) Console.WriteLine(e); Console.ReadKey(); 异常处理异常处理(chl)例题例题 第42页/共50页第四十三页,共50页。static void Main() try string s = null; ProcessString(s); / Most specific: catch (ArgumentNullException e) Console.WriteLine(0 First ex
21、ception caught., e); / Least specific: catch (Exception e) Console.WriteLine(0 Second exception caught., e); 注意此处的两个异常(ychng)顺序不能颠倒第43页/共50页第四十四页,共50页。第44页/共50页第四十五页,共50页。第45页/共50页第四十六页,共50页。委托(delegate)也是一种类型,它表示(biosh)对具有特定参数列表和返回类型的方法的引用。通过委托,开发人员能够将方法作为实体赋值给变量和作为参数传递。委托类似C+语言中的函数指针。下面实例声明了一个名为De
22、legate的委托。该委托可以封装一个采用字符串作为参数并返回的方法。Public delegate void Delegate(string message);委托具有以下特点:委托类似于C+函数指针,但它是类型安全的。委托允许将方法作为参数进行传递。委托可以用于定义回调方法。委托可以链接在一起;例如,可以对一个事件调用多种方法。方法不需要与委托签名精确匹配。匿名方法允许将代码块作为参数传递,以替代单独定义的方法。第46页/共50页第四十七页,共50页。第47页/共50页第四十八页,共50页。 事件(event)是一种特殊的委托,它是一种使对象或类能够提供通知或消息的成员。客户端可以通过(tnggu)提供事件处理程序为相应得事件添加可执行代码。 事件具有以下特点:事件是类用来通知对象需要执行某种操作的方式。事件通常用于图形界面中。事件通常使用委托事件处理程序进行声明。时间可以调用匿名方法来替代委托。第48页/共50页第四十九页,共50页。谢谢谢谢(xi xie)(xi xie)!第49页/共50页第五十页,共50页。