面向对象的C语言.ppt

上传人:本田雅阁 文档编号:2603315 上传时间:2019-04-16 格式:PPT 页数:69 大小:373.01KB
返回 下载 相关 举报
面向对象的C语言.ppt_第1页
第1页 / 共69页
面向对象的C语言.ppt_第2页
第2页 / 共69页
面向对象的C语言.ppt_第3页
第3页 / 共69页
面向对象的C语言.ppt_第4页
第4页 / 共69页
面向对象的C语言.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

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

1、第3章 面向对象的C#语言,唐大仕 http:/,本章内容,类、域、方法 属性、索引 类的继承 修饰符 接口 结构与枚举 面向对象:继承、封装、多态 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、)构造方法的方法名与类名相同。 (2)构造方法没有返回类型,也不能写void。 (3)构造方法的主要作用是完成对象的初始化工作。 (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

3、 name is “ + name ); public void sayHello( Person another ) Console.WriteLine(“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, “ ) / 构造方法的其他语句 ; ,应用示例:银行系统,系统中有几类对象?Acco

4、unt, Bank, ATM 每个类中有什么域、方法?,注:可在vs中,插入“类关系图”,3.2 属性、索引,使用属性、索引的示例,使用属性 button1.Text button1.Text = “说你好”; 含义相当于button1.SetText( “说你好”); String s = button1.Text; 含义相当于s = button1.GetText(); 使用属性 string s=“abcde”; 求出长度: s.Length 含义上相当于s.GetLength(); 使用索引 string s=“abcde”; 求出第0个字符: s0 含义上相当于s.Get(0),pr

5、ivate string myName; public string Name get return myName; set myName = value; 在C#新版中可简写为 public string Name set; get; ,对属性进行访问,Person p = new Person(); p.Name = “Li Ming”; Console.WriteLine( p.Name ); 编译器产生的方法是: void set_Name( string value ); string get_Name();,PersonProperty.cs,属性与域的比较,(1)属性可以实现只读

6、或只写,而域不能。 (2)属性的set方法可以对用户指定的值(value),进行有效性检查,从而保证只有正确的状态才会得到设置,而域不能。 (3)属性的get方法不仅可以返回域变量的值,还可以返回一些经过计算或处理过的数据,如上例中的只读属性Info,它返回的由Name及Age组合过的字符串。 (4)由于属性在实现时,实际上是方法,所以可以具有方法的一些优点,如可以定义抽象属性等等。,索引(Indexer),修饰符 类型名 this 参数列表 set get ,使用索引,对象名 参数 编译器自动产生两个方法,以供调用: T get_Item(P); void set_Item(P, T val

7、ue);,IndexerRecord.cs,属性与索引的比较,IndexerBitArray.cs,3.3 类的继承,使用继承的示例,我们定义的窗体 public class Form1 : System.Windows.Forms.Form,继承(inheritance),子类subclass、父类baseclass 单继承 所有的类都是通过直接或间接地继承object(即System.Object)得到的。,class SubClass : BaseClass ,示例,class Student : Person / ,继承,子类自动地从父类那里继承所有域、方法、属性、索引等成员作为自己的

8、成员。 除了继承父类的成员外,子类还可以添加新的成员,还可以隐藏或修改父类的成员。,域的继承、添加与隐藏,class A public int a; class B : A new public int a; ,方法的继承、添加,方法的继承 方法的添加,与父类同名的方法,一是定义同名、但参数列表(签名)与父类不同的方法,这称为对父类方法的重载(Overloading) 二是定义同名且参数列表也与父类相同的方法,这称为新增加一种方法 ,用new表示 三是定义同名且参数列表也与父类相同的方法,而且父类的方法用了abstract或virtual进行了修饰,子类的同名方法用了override进行了修饰

9、,这称为虚方法的覆盖(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(); Person p2 = new Student(); Student s1 = ne

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

11、 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(); DateTim

12、e.Parse String.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.PI

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

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

15、c sealed class String : IComparable, ICloneable, IConvertible, IEnumerable,定义一个接口,public interface IStringList void Add(string s); int Count get; string thisint index get; set; 注:public abstract 这两个关键词不加,实现接口,class 类名 : 父类, 接口, 接口, ,接口 ,TestInterface.cs,显式接口成员实现,方法名前写接口名 void IWindow.Close () 调用时,只能

16、用接口调用 ( ( IWindow ) f ).Close(); 在不同接口的方法相同时,能消除歧义,InterfaceExplicitImpl.cs,3.6 结构及枚举,结构struct,结构,如: Point, Color, Size, DateTime, Int32 struct 结构名 : 接口名 结构是隐式sealed;因此它们不能被继承。,使用struct要注意,struct是值类型 结构不能包含无参数构造方法 每个域在定义时,不能给初始值 构造方法中,必须对每个域进行赋值 实例化时,使用new,但与引用型变量的内存是不同的 值类型变量在赋值时,实行的是域的copy,StructN

17、ew.cs,StructPoint.cs,枚举 (enum),如FontStyle, GraphicsUnit, KnownColor, DockStyle, DialogResult 声明自己的属性 enum MyColor (注:后者可以跟一个 : 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 面向对象编程,面向对象O

18、O,Object Oriented方法的三大特点 继承 inheritance 子类继承父类的成员,还可增加、调用、隐藏 提高软件模块的可重用性和可扩充性 封装 encapsulation 使用接口,而不关心具体的类 使用属性,而将域设为private 多态 polymorphism 相同的方法,不同的参数 自动调用子类相应的方法(虚方法调用,以后讲),UML类图简介,UML,统一建模语言 有类图、状态图、时序图等多种图形,VS中的类关系图,在项目上,点右键,”查看类关系图“ 添加新项,其他项,类关系图 然后将相应的类文件拖动到该“类关系图”中,UML工具,IBM Rational XDE f

19、or .NET Borland Together Microsoft Visio 正向工程,由UML图自动产生代码 反向工程,由代码自动产生UML图,小结,类class、接口interface 结构struct、枚举enum 类的成员:域、方法、属性、索引 修饰词 public protected internal private static const readonly abstract sealed virtual override new OO与UML,练习,参见讲义及ch03目录,进一步阅读,书稿3 类和接口.doc C#语言规范 http:/,问题与讨论,,编程提示,数字要有意义,不能天上掉下来 常用手段 使用变量 deltx = 100 使用常量 const int MAX_LEN = 1000 使用系统常量 Math.PI 使用枚举,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1