第3章面向对象的C语言.ppt

上传人:sccc 文档编号:5642122 上传时间:2023-08-05 格式:PPT 页数:68 大小:364.51KB
返回 下载 相关 举报
第3章面向对象的C语言.ppt_第1页
第1页 / 共68页
第3章面向对象的C语言.ppt_第2页
第2页 / 共68页
第3章面向对象的C语言.ppt_第3页
第3页 / 共68页
第3章面向对象的C语言.ppt_第4页
第4页 / 共68页
第3章面向对象的C语言.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《第3章面向对象的C语言.ppt》由会员分享,可在线阅读,更多相关《第3章面向对象的C语言.ppt(68页珍藏版)》请在三一办公上搜索。

1、第3章 面向对象的C#语言,本章内容,类、域、方法属性、索引类的继承修饰符接口结构与枚举面向对象:继承、封装、多态UML类图简介,3.1 类、域、方法,定义类中的域和方法,class Person public string name;public int age;public void sayHello()Console.WriteLine(Hello!My name is+name);public string getInfo()return Name:+name+,Age:+age;,构造方法,(1)构造方法的方法名与类名相同。(2)构造方法没有返回类型,也不能写void。(3)构造方法

2、的主要作用是完成对象的初始化工作。(4)构造方法一般不能显式地直接调用,而是用new来调用。,缺省构造方法,public Person(),析构方法,class Person Person(),对象的创建,Person p=new Person(“Liming”,20);,对象的使用,Console.WriteLine(p.name);p.sayHello();,方法的重载,签名,public void sayHello()Console.WriteLine(Hello!My name is+name);public void sayHello(Person another)Console.W

3、riteLine(Hello,+another.name+!My name is+name);,OverloadingTest.cs,使用this,public Person(int age,string name)this.age=age;this.name=name;,public Person():this(0,)/构造方法的其他语句;,应用示例:银行系统,系统中有几类对象?Account,Bank,ATM每个类中有什么域、方法?,3.2 属性、索引,使用属性、索引的示例,使用属性 button1.Text button1.Text=“说你好”;含义相当于button1.SetText(

4、“说你好”);String s=button1.Text;含义相当于s=button1.GetText();使用属性 string s=“abcde”;求出长度:s.Length含义上相当于s.GetLength();使用索引 string s=“abcde”;求出第0个字符:s0含义上相当于s.Get(0),private string myName;public string Nameget return myName;set myName=value;,对属性进行访问,Person p=new Person();p.Name=“Li Ming”;Console.WriteLine(p.N

5、ame);编译器产生的方法是:void set_Name(string value);string get_Name();,PersonProperty.cs,属性与域的比较,(1)属性可以实现只读或只写,而域不能。(2)属性的set方法可以对用户指定的值(value),进行有效性检查,从而保证只有正确的状态才会得到设置,而域不能。(3)属性的get方法不仅可以返回域变量的值,还可以返回一些经过计算或处理过的数据,如上例中的只读属性Info,它返回的由Name及Age组合过的字符串。(4)由于属性在实现时,实际上是方法,所以可以具有方法的一些优点,如可以定义抽象属性等等。,索引(Indexer

6、),修饰符 类型名 this 参数列表 set get,使用索引,对象名 参数 编译器自动产生两个方法,以供调用:T get_Item(P);void set_Item(P,T value);,IndexerRecord.cs,属性与索引的比较,IndexerBitArray.cs,3.3 类的继承,使用继承的示例,我们定义的窗体public class Form1:System.Windows.Forms.Form,继承(inheritance),子类subclass、父类baseclass单继承所有的类都是通过直接或间接地继承object(即System.Object)得到的。,class

7、 SubClass:BaseClass,示例,class Student:Person/.,继承,子类自动地从父类那里继承所有域、方法、属性、索引等成员作为自己的成员。除了继承父类的成员外,子类还可以添加新的成员,还可以隐藏或修改父类的成员。,域的继承、添加与隐藏,class Apublic int a;class B:Anew public int a;,方法的继承、添加,方法的继承方法的添加,与父类同名的方法,一是定义同名、但参数列表(签名)与父类不同的方法,这称为对父类方法的重载(Overloading)二是定义同名且参数列表也与父类相同的方法,这称为新增加一种方法,用new表示三是定义

8、同名且参数列表也与父类相同的方法,而且父类的方法用了abstract或virtual进行了修饰,子类的同名方法用了override进行了修饰,这称为虚方法的覆盖(Overriding)。,InheritFieldMethod.cs,使用base,void sayHello()base.sayHello();Console.WriteLine(My school is+school);,Student(string name,int age,string school):base(name,age)this.school=school;,父类与子类的转换,Person p1=new Person

9、();Person p2=new Student();Student s1=new Student();Student s2=new Student();p1=s1;/可以,因为Person类型的变量可以引用Student对象s2=p1;/不行,因为会产生编译错误s2=(Student)p1;/编译时可以通过,运行时则会出现类型不能转换的异常s2=(Student)p2;/正确,因为p2引用的正好是Student对象实例,as运算符,如果不能转换,则值为nullStudent s3=p1 as Student;/结果s3为nullStudent s4=p2 as Student;/s4被赋值与

10、强制类型转换的差别as只能针对引用型变量如果不能转换,as运算不会引起异常,只是值为null,is运算符,if(p is Person)判断一个对象是不能某个类(及其子类)的实例,typeof()运算符,获得其运行时的类型Type t=typeof(变量);Type t=typeof(类名);,属性、索引的继承,3.4 修饰符,访问控制符,static,static的域、方法、属性是属于整个类的static方法中,不能访问实例变量 调用static方法时,直接用类名访问 Console.Write();Math.Sqrt();Convert.ToDateTime();DateTime.Pars

11、eString.Copy(a);String.Format(“0”,x)static变量可以用来表示“全局变量”在c#2.0中,类名也可以用static来修饰,StaicAndInstance.cs,static构造方法,class Person static long totalNum;static Person()totalNum=(long)52e8;Console.WriteLine(人类总人口+totalNum);static方法只会调用一次,但其调用时间是不确定的。,const及readonly,const相当于静态常量如Math.PIreadonly相当于不可改量,只能赋一次值如

12、String.Empty在构造方法中赋值,或者在声明时就赋值注:const 只能用于基本类型及string(如果用于其他类型则无意义,因为只能为null值)。readonly只能修饰域,而const还可以修饰局部变量,Constans.cs,ReadonlyColor.cs,sealed及abstract,sealed类,不可继承(也有利于编译优化)如String Console Math Convert Graphics Fontabstract类,不可实例化(new)如Array,RandomNumberGeneratorabstract的方法体,不用,用;abstract 类型 方法名(

13、参数列表);abstract 类型 属性名get;set;,抽象类表示了其子类的属性,AbstractShapeTest.cs,3.5 接口,接口(interface),相似于抽象类一个抽象成员的集合如:ICloneable,IComparable,IConvertible,IDisposable,IFormattable,IEnumerable,帮助实现多重继承,接口的用处,实现不相关类的相同行为 需要考虑这些类之间的层次关系 通过接口可以了解对象的交互界面,而不需了解对象所对应的类 例如:public sealed class String:IComparable,ICloneable,I

14、Convertible,IEnumerable,定义一个接口,public interface ISringListvoid Add(string s);int Count get;string thisint index get;set;,实现接口,class 类名:父类,接口,接口,接口,TestInterface.cs,显式接口成员实现,方法名前写接口名void IWindow.Close()调用时,只能用接口调用(IWindow)f).Close();在不同接口的方法相同时,能消除歧义,InterfaceExplicitImpl.cs,3.6 结构及枚举,结构struct,结构,如:P

15、oint,Color,Size,DateTime,Int32 struct 结构名:接口名结构是隐式sealed;因此它们不能被继承。,使用struct要注意,struct是值类型结构不能包含无参数构造方法 每个域在定义时,不能给初始值构造方法中,必须对每个域进行赋值实例化时,使用new,但与引用型变量的内存是不同的值类型变量在赋值时,实行的是域的copy,StructNew.cs,StructPoint.cs,枚举(enum),如FontStyle,GraphicsUnit,KnownColor,DockStyle,DialogResult声明自己的属性enum MyColor(注:后者可以

16、跟一个:int)Red,Green=1,Blue=2,EnumColor.cs,使用枚举,MyColor c=MyColor.Red;Console.WriteLine(c.ToString();c=(MyColor)Enum.Parse(typeof(MyColor),Red);,3.7 面向对象编程,面向对象OO,Object Oriented方法的三大特点继承 inheritance子类继承父类的成员,还可增加、调用、隐藏提高软件模块的可重用性和可扩充性封装 encapsulation使用接口,而不关心具体的类使用属性,而将域设为private多态 polymorphism相同的方法,不

17、同的参数自动调用子类相应的方法(虚方法调用,以后讲),UML类图简介,UML,统一建模语言有类图、状态图、时序图等多种图形,VS中的类关系图,在项目上,点右键,”查看类关系图“添加新项,其他项,类关系图,UML工具,IBM Rational XDE for.NETBorland TogetherMicrosoft Visio正向工程,由UML图自动产生代码反向工程,由代码自动产生UML图,小结,类class、接口interface结构struct、枚举enum类的成员:域、方法、属性、索引修饰词public protected internal privatestaic const readonly abstract sealedOO与UML,练习,参见讲义及ch03目录,进一步阅读,书稿3 类和接口.docC#语言规范http:/,问题与讨论,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号