《C#程序设计基础》PPT课件.ppt_第1页
《C#程序设计基础》PPT课件.ppt_第2页
《C#程序设计基础》PPT课件.ppt_第3页
《C#程序设计基础》PPT课件.ppt_第4页
《C#程序设计基础》PPT课件.ppt_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

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

文档简介

C#网络应用编程基础,主讲教师:李璟联系电话-mail:lijing,第三讲C#程序设计基础(二),理解和掌握C#面向对象基本编程方法。掌握继承的编程方法。掌握虚方法多态性编程。重点和难点:C#面向对象基本编程方法、继承编程方法、虚方法多态性编程。,补充:C#数组的声明与使用,数组用于存储一组同类型的数据。数组是按照数组名、元素类型和维数来描述的。一维数组在编程中经常用到,下面仅介绍C#中一维数组的声明与使用。(1)一维数组的声明语法为:数据类型数组名;如:intmyArray;注意:区分C语言的数组定义语法为:数据类型数组名元素个数;如:intmyArray10;,(2)一维数组的初始化,C#语言中数组在访问之前必须先初始化。不能像下面这样访问数组或给数组赋值:intmyIntArray;/只声明但没有初始化。myIntArray10=5;/未初始化,不能访问数组元素数组的初始化有三种方式:以字面形式指定数组的完整内容。如:stringstrArray1=C,C+,C#;IntintArr2=5,6,7;指定数组的大小,并使用关键字new初始化所有的数组元素,会自动给所有元素赋予同一个默认值。如:stringstrArray2=newstring3;intintArr1=newint4;默认值规则如下:数值型:如int、double等,初始化为0。bool类型:初始化为false.引用类型:初始化为null。,一维数组的初始化(续),还可以使用以上两种方式的组合,使用该方式,数组大小必须与元素个数相匹配。如:intintArr1=newint40,1,2,3;stringmystring=newstring3“first”,”second”,”third”;,(3)一维数组的使用,数组元素的下标是从0开始索引的。如,访问共有32个元素数组integers中的单个元素时,integers0=23;/为第1个元素赋值integers31=67;/为第32个元素赋值integersi=90;/为第i+1个元素赋值在C#中,由Array类提供创建、操作、搜索和排序数组的方法,因而在公共语言运行库中用作所有数组的基类。Array类包括许多方法和属性用于数组的操作,其中经常使用的一个重要属性是数组的长度Length。调用形式:数组名.Length。如:intIntegers=2,6,-1,10,12;intArrayLength=Integers.Length;,使用数组举例,staticvoidMain(stringargs)stringfriendNames=Robert,Mike,Bob;inti;Console.WriteLine(Hereare0ofmyfriends:,friendNames.Length);for(i=0;i=money)accountBanlance-=money;Console.WriteLine(扣掉0:C,money);,classProgramstaticvoidMain()BankAccountZhangSan=newBankAccount(1000);Console.WriteLine(账户的余额为0:C,ZhangSan.AccountBanlance);ZhangSan.Withdraw(100);Console.WriteLine(账户的余额为0:C,ZhangSan.AccountBanlance);Console.ReadLine();运行结果:帐户的余额为¥1,000.00扣掉¥100.00帐户的余额为¥900.00,若上题中增加一个修改:若一次扣款超过500元,就提示“每次扣款额不能超过500元!”,则仅需修改类内方法Withdraw方法,修改如下:publicvoidWithdraw(decimalmoney)if(accountBanlance=money)if(money=500.00)Console.WriteLine(每次扣款额不能超过500元!);return;elseaccountBanlance-=money;Console.WriteLine(扣掉0:C,money);,3.2.2继承,继承的概念来自于遗传与分类,遗传:每个人的特征或多或少都来自于父母的遗传,但每个人都不可能完全与父母一模一样,有着自己与众不同的特征。分类:现实世界中的事物都是相互联系的,人们在认识过程中,根据他们的实际特征,抓住其共同特征和细小差别,利用分类的方法进行分析和描述他们。,3.2.2继承,继承的概念C#派生类的声明C#派生类中的构造方法,继承的概念,在现实世界中,许多实体或概念不是孤立的,它们具有共同的特征,但也有细微的差别,人们使用层次分类的方法来描述这些实体或概念之间的相似点和不同点。继承是面向对象程序设计中最重要的机制,它支持层次分类的观点。继承使得程序员可以在一个较一般的类的基础上很快地建立一个新类,而不必从零开始设计每个类。,基类和派生类的关系,在OOP中,继承使得派生类具有基类的特征,同时又允许在派生类的声明时增加自己的特征,或修改基类的特征。,C#派生类的声明,声明一个C#派生类的一般格式为:class派生类名:基类名/派生类新增的数据成员和成员函数;其中,“基类名”是一个已经定义的类的名称,“派生类名”是继承原有类的特性而生成的新类的名称。,C#派生类中的构造方法,基类的构造函数不能被继承,派生类必须自身的构造函数。在派生类中对新增成员的初始化工作,是由派生类的构造函数完成的。在派生类中对基类成员的初始化工作,还是由基类的构造函数完成。我们必须在派生类的构造函数中对基类的构造函数所需要的参数进行设置。通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数。,派生类构造函数的一般格式,派生类名(参数总表):base(参数表)/派生类新增成员的初始化语句默认情况下,派生类的所有构造函数会自动调用基类的无参构造函数。当派生类的有参构造函数需要调用基类的有参构造函数时,需要在定义派生类构造函数时,缀上基类名base及其有参构造函数的初始化列表。如:publicCar(intw,floatg,intp,stringid):base(w,g,p,id),例派生类构造函数默认情况下自动调用基类的无参构造函数,classAnimalprotectedstring_name;publicAnimal()Console.WriteLine(你好,我是一只动物!);publicAnimal(stringname)_name=name;Console.WriteLine(你好,我是一只动物!我的名字叫+_name+!);publicvoidEat()Console.WriteLine(_name+在吃食!);classCat:AnimalpublicCat()Console.WriteLine(你好,我是一只猫!);publicCat(stringname)_name=name;Console.WriteLine(你好,我是一只猫!我的名字叫+_name+!);,classProgramstaticvoidMain()Cate=newCat(小白);e.Eat();Cath=newCat();Console.ReadLine();运行结果:你好,我是一只动物!你好,我是一只猫!我的名字叫小白!小白在吃食!你好!我是一只动物!你好!我是一只猫!说明:该例中Cat的两个构造函数都自动调用了基类Animal的无参构造Animal()。,例派生类构造函数调用指定的基类有参构造函数,classAnimalprotectedstring_name;publicAnimal()Console.WriteLine(你好,我是一只动物!);publicAnimal(stringname)_name=name;Console.WriteLine(你好,我是一只动物!我的名字叫+_name+!);publicvoidEat()Console.WriteLine(_name+在吃食!);classCat:AnimalpublicCat()Console.WriteLine(你好,我是一只猫!);publicCat(stringname):base(name)_name=name;Console.WriteLine(你好,我是一只猫!我的名字叫+_name+!);,classProgramstaticvoidMain()Cate=newCat(小白);e.Eat();Cath=newCat();Console.ReadLine();运行结果:你好,我是一只动物!我的名字叫小白!你好,我是一只猫!我的名字叫小白!小白在吃食!你好!我是一只动物!你好!我是一只猫!说明:在该例中,Cat(stringname)调用了基类Animal中的有参构造函数Animal(stringname)。,3.2.3多态性,C#最重要的特征之一就是代码重用。多数情况下,越通用的代码越能够重用。多态性是通过提高代码的通用性来实现代码重用的。直观地讲,多态性是指类族中具有相似功能的不同函数使用同一名称来实现,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数,即通过用相同的接口访问不同功能的函数,来实现“一个接口,多种方法”的通用性。(注:类族是指由直接或间接派生自共同基类的所有派生类和共同基类组成的类的集合。)从消息的角度说,多态性是指同样的消息被不同类型的对象接收时导致完全不同的行为。,C#多态性的实现方式,主要有以下几种实现多态性的方式。第一种方式是通过继承实现多态性,分为两种:1.虚方法2.隐藏基类的方法第二种方式是通过抽象类实现多态性。,3.2.3多态性,虚方法隐藏基类的方法抽象类,虚方法,在基类中,如果想让某个方法被派生类重写,可以使用修饰符virtual声明该方法为虚方法,形式如下:publicvirtual返回值类型方法名()/程序代码派生类则用override重写,形式如下:publicoverride返回值类型方法名()/程序代码,虚函数,例如,如果在基类中,如果想让方法myMethod被派生类重写,可以使用修饰符virtual声明:publicvirtualvoidmyMethod()/程序代码派生类则用override重写:publicoverridevoidmyMethod()/程序代码,使用虚方法与重写方法时,需要注意下面几个方面:1)虚方法不能声明为静态(static)的。因为静态的方法是应用在类这一层次的,而多态性只能在对象上运作。2)virtual不能和private一起使用。因为声明为private就无法在派生类中重写了。3)重写方法的名称、参数个数、类型以及返回值都必须和虚方法的一致。4)虚方法在派生类中不是必须被重写的,不重写时,派生类将自动调用虚方法在基类中的版本。,例利用虚方法多态性编写汽车信息管理程序,classVehicle/定义车基类protectedintpassengers;/乘客数protectedintwheels;/轮子个数protectedfloatweight;/重量protectedstringvidentifier;/标志publicVehicle(intw,floatg,intp,stringid)wheels=w;weight=g;videntifier=id;passengers=p;publicvirtualSpeak()publicvoidPrint()Console.WriteLine(乘客数:+passengers);Console.WriteLine(轮子数:+wheels);Console.WriteLine(重量:+weight);Console.WriteLine(标志:+videntifier);,classTruck:Vehicle/定义卡车类privatefloatload;/私有成员:载重量publicTruck(intw,floatg,intp,floatl,stringid):base(w,g,p,id)load=l;publicoverridevoidSpeak()Console.WriteLine(卡车鸣笛:叭叭叭叭!);publicnewvoidPrint()base.Print();Console.WriteLine(载重:+load);,classCar:Vehicle/定义轿车类publicCar(intw,floatg,intp,stringid):base(w,g,p,id)publicoverridevoidSpeak()Console.WriteLine(轿车鸣笛:嘀嘀嘀嘀!);classBus:Vehicle/定义公共汽车类publicBus(intw,floatg,intp,stringid):base(w,g,p,id)publicoverridevoidSpeak()Console.WriteLine(公共汽车鸣笛:嘟嘟嘟嘟!);,classProgramstaticvoidMain(stringargs)/乘客数轮子数重量Carc1=newCar(4,2,5,标志307);/乘客数轮子数重量载重量Truckt1=newTruck(6,5,3,10,解放);Busb1=newBus(4,3,40,金杯);/轿车Console.WriteLine(/);Console.WriteLine(轿车信息:);c1.Speak();c1.Print();/嘀嘀/卡车Console.WriteLine(/);Console.WriteLine(卡车信息:);t1.Speak();t1.Print();/叭叭/公共汽车Console.WriteLine(/);Console.WriteLine(公共汽车信息:);b1.Speak();b1.Print();/嘟嘟Console.WriteLine(/);Console.ReadLine();,隐藏基类的方法,在派生类中,可以使用new关键字来隐藏基类的方法,即使用一个完全不同的方法取代旧的方法。与方法重写不同的是,使用new关键字时并不要求基类中的方法声明为virtual,只要在派生类的方法前声明为new,就可以隐藏基类的方法。,例隐藏基类的方法,classHellopublicvoidSayHello()Console.WriteLine(这是基类!);classNewHello:HellopublicnewvoidSayHello()Console.WriteLine(“这是派生类!);,classProgramstaticvoidMain(stringargs)Hellob=newHello();b.SayHello();NewHellod=newNewHello();d.SayHello();Console.ReadLine();运行结果:这是基类!这是派生类!,抽象类,利用抽象类,可以声明仅定义了部分实现的类,让派生类提供某些或者全部方法的实现。如果对于给定类型的大多数或者全部对象来说,某些行为是既定的,而有些行为只是对一个特定类有意义时,抽象类就很有帮助。抽象类是至少带有一个抽象方法的类。,抽象方法,抽象方法是一个在基类中只说明函数原型以规定整个类族的统一接口形式的虚方法。抽象方法在该基类中没有定义具体的操作内容,但要求在各派生类中根据实际需要定义自己的版本。声明为抽象方法之后,基类中就不再给出函数的实现部分。抽象方法的函数体由派生类给出。,抽象方法的声明与实现形式,(1)抽象方法的声明形式如下:abstract方法类型方法名(参数表);如:abstractvoidshow();(2)抽象方法在派生类中被实现的形式为:publicoverride返回类型方法名()/方法体如:publicoverridevoidshow()/方法体,抽象类,至少带有一个抽象方法的类是抽象类。抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。抽象类声明了一系列派生类的公共接口,而接口的完整实现,即抽象方法的函数体,要由派生类自己定义。抽象类派生出新的类之后,如果派生类给出所有抽象方法的函数实现,这个派生类就可以声明自己的对象,不再是抽象类,可以实例化;反之,如果派生类没有给出全部抽象函数的实现,这时的派生类仍然是一个抽象类,不能实例化。,抽象类的声明形式,抽象类使用abstract修饰符,声明形式如下:abstractclass类名publicabstract返回值类型抽象方法名();如:abstractclassShapepublicabstractvoidRotate();/抽象方法,抽象类与非抽象类的主要不同:,第一是抽象类不能直接被实例化,只能在派生类中通过继承使用。第二是抽象类可以包含抽象成员,而非抽象类不能包含抽象成员。当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员。,例抽象方法和抽象类,abstractclassShapepublicvirtualvoidDraw()Console.WriteLine(画一种图形!);publicabstractvoidRotate();/抽象方法classSquare:ShapepublicoverridevoidDraw()Console.WriteLine(画一个正方形!);publicoverridevoidRotate()Console.WriteLine(顺时针方向旋转正方形!);,classProgramstaticvoidMain(stringargs)Squareme=newSquare();me.Draw();me.Rotate();Console.ReadLine();运行结果:画一个正方形!顺时针方向旋转正方形!,例利用抽象类多态性编写汽车信息管理程序,abstractclassVehicle/定义车基类protectedintpassengers;/乘客数protectedintwheels;/轮子个数protectedfloatweight;/重量protectedstringvidentifier;/标志publicVehicle(intw,floatg,intp,stringid)wheels=w;weight=g;videntifier=id;passengers=p;publicabstractSpeak();/抽象方法publicvoidPrint()Console.WriteLine(乘客数:+passengers);Console.WriteLine(轮子数:+wheels);Console.WriteLine(重量:+weight);Console.WriteLine(标志:+videntifier);,classTruck:Vehicle/定义卡车类privatefloatload;/私有成员:载重量publicTruck(intw,floatg,intp,floatl,stringid):base(w,g,p

温馨提示

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

评论

0/150

提交评论