收藏 分享(赏)

第4章主流软件开发方法——面向对象入门(C#从入门到精通).ppt

上传人:精品资料 文档编号:10539100 上传时间:2019-11-27 格式:PPT 页数:47 大小:236KB
下载 相关 举报
第4章主流软件开发方法——面向对象入门(C#从入门到精通).ppt_第1页
第1页 / 共47页
第4章主流软件开发方法——面向对象入门(C#从入门到精通).ppt_第2页
第2页 / 共47页
第4章主流软件开发方法——面向对象入门(C#从入门到精通).ppt_第3页
第3页 / 共47页
第4章主流软件开发方法——面向对象入门(C#从入门到精通).ppt_第4页
第4页 / 共47页
第4章主流软件开发方法——面向对象入门(C#从入门到精通).ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、第4章主流软件开发方法 面向对象入门, 类的定义和类的成员 对象的创建和使用 分部类 结构和类 命名空间,4.1 C#中的类,面向对象程序设计是目前主流的编程方法,C#是一门纯粹的面向对象的语言,面向对象编程的基础是类和对象,类是面向对象程序设计思想的灵魂,下面我们学习类的概念。,4.1.1 类的概念,日常生活中,类是对具有相同特征的一类事物的抽象描述,比如水果就是一个类,它是对苹果、梨等所有具体水果的抽象描述,而这个类中所包含的具体的苹果、梨等个体就是对象。不同的类具有不同的特征,比如人类、水果类和电脑类分别是不同的类等。,4.1.2 类的定义,类的定义使用class关键字,其语法如下: 访

2、问修饰符 class 类名 /类的主体 ,访问修饰符,在C#中访问修饰符有4种,它们是: public:对类的访问不受限制,就像公共图书馆一样,谁都可以进去看书; protectecd:对类的访问仅限于包含类或从包含类派生的类型,就像单位的图书馆,只有该单位或其子公司的人才能进去; private:访问仅限于包含类型,如私人图书馆一样不对外开放; 类名采用帕斯卡命名法,即首字母大写,通常命名类采用完整的英文单词,如Person类,Student类。提示 internal:访问仅限于当前项目,如单位的图书馆除本单位的人能访问外,外单位排到本单位协助工作的人也能访问。,【范例4-1】 定义一个电话

3、类。,class Phonepublic string brand; /定义公有的成员表示电话的品牌 public string phoneNumber; /定义公有的成员表示电话的电话号码 ,4.1.3 类的成员,定义在类名后大括号中的元素都是类的成员。类的主要成员包括描述状态的数据成员和描述操作的函数成员。比如在4.1.1小节的Phone类中,电话有机主、电话号码等属性,这些属性就是Phone类的数据成员,而电话还有接电话和拨电话等功能,这些功能则属于函数成员。,1. 数据成员,常量成员名称的第一个字母一般大写,也经常使用全部大写、多个字之间用下划线连接的常量名。提示 类的数据成员包括:

4、字段(或者称域)和常量。字段就是在类内定义的变量,用来存储描述类的特征的值,如电话的颜色、所属的主人,电话号码等。常量是类的常量成员。 声明字段成员变量的语法如下: 访问修饰符 数据类型 成员变量名,2. 属性成员,类的函数成员包括:属性、方法、索引器、事件、运算符、构造函数和析构函数。下面我们来介绍一下属性成员。 从前面学习可知,其他类可以访问某个类中具有public权限的成员变量,将变量声明为public类型,不利于数据的安全,破坏了类的封装特性。通过属性成员可以对类中私有成员变量进行读取和赋值操作。属性成员中用get访问器和set访问器来对类中私有成员变量进行读写操作的。定义属性方法格式

5、如下: 访问修饰符 数据类型 属性名 get /get访问器 set /set访问器 ,3. 方法,方法用来描述对象的行为,对类的数据成员的操作都封装在类的方法中。方法的主要功能便是数据操作,没有方法的程序是没有意义的,就像电话如果不具有接打电话等功能,是没有什么作用的。 方法的声明格式如下: 访问修饰符 返回值数据类型 方法名(参数列表) /方法体 ,4. 静态成员,类的成员要么是静态的,要么是非静态的。前面介绍的类的成员都是非静态的,使用的必须实例化。如果将类中的某个成员声明为static,则该成员是静态成员,非静态成员也叫实例成员。类的静态成员可以直接使用,不必产生类的实例。无论这个类创

6、建了多少个实例, 静态成员为类的所有实例所共享。如任何电话都可以拨打急救电话,拨打急救电话功能可以定义为静态的.,【范例4-2】 定义一个有多种成员类型的类,1 private string _owner; /定义一个私有字段表示电话机主 2 public string address; /定义一个公有字段表示电话地址 3 private static string _phoneNumber; /定义一个静态字段成员用于表示电话号码 4 /属性成员 5 public string Owner /定义一个属性成员,用于设置和获取私有字段_owner的值 6 7 get return _owner

7、; /获取私有字段_owner的值 8 set _owner = value; /设置和私有字段_owner的值value是关键字 9 10 /无参数方法成员,表示电话具有拨打电话功能 11 public void Dial() 12 13 Console.WriteLine(“您正在拨打电话!”);,14 15 /有参数方法成员,表示电话这种拨打一个具体的电话号码 16 public void Dial(string number) 17 18 Console.WriteLine(“您正在拨打:” + number); 19 20 /静态属性成员,用于设置和获取静态字段成员_phoneNum

8、ber的值 21 public static string PhoneNumber 22 23 get return _phoneNumber; 24 set _phoneNumber = value; 25 26 /添加静态方法EmergencyCall; 27 public static void EmergencyCall() 28 29 Console.WriteLine(“您正在拨打急救电话119!”); 30 ,在Program.cs的Main方法中输入以下代码以测试类的成员。,Phone.EmergencyCall(); /静态方法可直接使用 Console.WriteLine(

9、Phone.emergency_Call);Phone objPhone = new Phone(); /创建对象objPhone.PhoneNumber = “13888888888“;/通过set访问器私有字段phoneNumber赋值Console.WriteLine(“电话号码是:“ + objPhone.PhoneNumber);/通过get访问器得到私有字段phoneNumber的值objPhone.Dial();objPhone.Dial(“13888888888“); /使用非静态成员Console.Read();,第4章主流软件开发方法 面向对象入门, 类的定义和类的成员 对

10、象的创建和使用 构造函数和析构函数 分部类 结构和类 命名空间,4.2 C#中的对象,类和对象是密不可分的,有类就有对象,有对象就有类。客观世界是由多种对象组成的,用面向对象的思想来编写程序,就要把一切都看为对象。,4.2.1 对象的概念,类是相同特征的一类事物的抽象,而对象是类的实例。类和对象有着本质的区别:类是从对象中抽取出来的一类对象的描述,对象是真实的个体,是一个具体的事物,从抽象到具体即是将类的属性和行为实例化的过程。类与对象的关系可以比喻为车型设计和具体的车:类就像车型设计一样说明了车所应该具备的所有属性和功能,但是车型设计并不是车,你不能发动和驾驶车型;对象就像根据车型设计制造出

11、的车,它们都具备车型设计所描述的属性和功能,车是能发动和驾驶的。,4.2.2 对象的创建和使用,类是抽象的,要使用类中非静态的成员,就必须实例化类,即创建类的对象。如何创建对象并使用它呢? 使用new运算符来创建类的对象! 对象的创建必须以类为基础,声明一个对象就是类的实例化的过程,C#使用new运算符来创建对象,格式如下: 类名 对象名 = new 类名(参数列表);,Phone objPhone = new Phone(); 对象的使用是通过对对象中的成员的访问来实现的,访问对象中的成员的语法如下: 对象名.成员名 如: objPhone.address = “办公楼3204”; objP

12、hone.Dial(“13888888888”);,4.2.3 匿名类型和对象初始化器,匿名类型和对象初始化器是C# 3.0新增加的功能,用来简化对象的初始值设置的。使用对象初始化,创建Phone并对其属性成员Owner赋值可以这样写: Phone objPhone = new Phone () Owner = “办公楼3204” ;,例如:定义类Point,有两个自动属性X,Y表示点的坐标。,1 public class Point 2 3 public int X get; set; 4 public int Y get; set; 5 使用对象初始化,可这样创建对象并对属性赋值: Poi

13、nt p = new Point() X = 0, Y = 0 ;,使用匿名类型可以定义内嵌的类型,不需要显式地定义一个类型。假设没有定义Phone类,却要使用一个Phone对象(即类型是匿名的),可以使用对象初始化语法,但不用指定类型名: var p = new X = 0, Y = 2; 在VS2008中,仍然可以使用智能感应功能得到这个匿名类型的属性列表。,4.2.4 构造函数和析构函数,对象和客观世界中的事物一样,从创建到消亡都有一个生命周期,对象的创建和销毁是通过类的构造函数和析构函数来完成的。,构造函数,C#通过new创建对象的过程实际就是调用类的构造函数的过程,创建对象时,必须调

14、用构造函数,构造函数是用于执行类的实例的初始化。每个类都有构造函数,如果没有定义,系统会提供一个默认的构造函数,默认的构造函数一般不执行什么操作。在访问一个类的时候,系统将最先执行构造函数中的语句。 构造函数是类的特殊方法成员,名称和类名相同,主要用来完成初始化的。,2. 析构函数,析构函数用于在对象销毁前释放被占用的系统资源。析构函数的名字与类名相同,只是在前面加了一个符号“”,析构函数不接受任何参数,也不返回任何值,例如: 1 public class MyClass 2 3 MyClass() 4 /析构函数 一个类只能有一个析构函数,析构函数不能手动调用,是系统自动调用的。提示 5 ,

15、【范例4-3】 定义一个有多种成员类型的类,1 class Program 2 3 static void Main(string args) 4 5 6 /类program结束 7 8 class Score 9 10 public int x; /定义字段成员x 11 public int y; /定义字段成员y 12 13 public Score() /无参数构造函数用于对字段成员初始化 14 15 x = 0; y =2; /用于对字段成员初始化 16 ,17 public Score(int val_x,int val_y) /有参数构造函数 18 19 x = val_x; y

16、= val_y; /用于对字段成员初始化 20 21 22 Score() /析构函数 23 24 Console.WriteLine(“析构函数主要用于清理资源!”); 25 Console.ReadKey();/为了看见析构函数的运行,可以添加此行代码; 26 析构函数不能有任何访问修饰符,也不能有返回值,否则会出错。 27 ,在Program.cs的Main方法中输入以下代码以测试类的成员。,1 Score objScore1 = new Score(); /用无参构造函数创建对象objScore1 2 Console.WriteLine(“无参数构造函数演示”); 3 Console.

17、WriteLine(“x=”+objScore1.x ); 4 Console.WriteLine(“y=”+objScore1.y); 5 Score objScore2 = new Score(80,90); /用有参构造函数创建对象objScore2 6 Console.WriteLine(“有参数构造函数演示”); 7 Console.WriteLine(“x=” + objScore2.x); 8 Console.WriteLine(“y=” + objScore2.y); 9 Console.ReadKey();,4.2.5 参数传递,C#传递参数有两种类型:值传递和引用传递,前面

18、的例子没有具体说明参数传递的类型,是按照值传递来进行的,值传递是C#默认传递方式。使用值传递方式向方法传递参数,向方法传递的是参数的副本,方法内发生的对参数的更改对该参数本身无任何影响,就像文件的复印件一样,无论如何修改复印件,原件不会有任何改变。如果希望所调用的方法更改参数的值,必须使用 ref 或 out 关键字声明通过引用方式传递参数,out传递与ref类似,二者区别是ref要求参数变量在传递之前必须初始化,out则不要求。,第4章主流软件开发方法 面向对象入门, 类的定义和类的成员 对象的创建和使用 构造函数和析构函数 分部类 结构和类 命名空间,4.3 分部类,Partial类,有人

19、翻译为“部分类”,在 MSDN 上译为“分部(类型)”, 所以我们使用“分部类”这一官方说法。提示 一般来说,一个类、结构或接口位于一个源文件中,但某些情况,比如大型项目、特殊部署时,可能需要把一个类、结构或接口放在几个文件中来处理。等到编译时,自动把它们组合起来成为一个完整的类,这就得应用 C# 分部类了。,分部类适用于以下情况:(1) 类型特别大,不宜放在一个文件中实现;(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起;(3) 需要多人合作编写一个类。分部类是一个纯语言层的编译处理,不影响任何执行机制,事实上C#编译器在编译的时候仍会将各个部分的局部

20、类型合并成一个完整的类。 C# 分部类的关键字修饰符是 partial。,例如在一个文件中声明分部类Person的代码如下。,01 public partial class Person /定义分部类Person的部分代码 02 03 public void DoWork() /定义方法DoWork 04 05 /定义方法,表示Person类有工作的功能; 06 07 ,在另一个文件中声明分部类Person,01 public partial class Person /定义分部类Person的部分代码 02 03 public void GoToLunch() /定义方法GoToLunch

21、04 05 /定义方法,表示Person类有去吃午饭的功能 06 07 ,第4章主流软件开发方法 面向对象入门, 类的定义和类的成员 对象的创建和使用 分部类 结构和类 命名空间,4.4 结构与类,4.4.1 结构的定义和使用 结构类型是一种值类型,通常用来封装小型相关变量组,例如,矩形的坐标或商品的特征。结构和类相似,但结构缺乏某些功能,例如继承。由于结构是值类型,通常创建结构要比创建类的速度快。如果需要一些紧凑循环,需要在其中创建大量新数据结构,则应考虑使用结构而不是类。,在C#中,结构可以看成轻量级的类,定义和类的定义相似,采用struct进行定义,每个struct类型数据可以常量、变量

22、、构造函数、方法和属性等成员。 定义结构的语法如下: struct 结构名 /结构体定义 使用结构通过声明结构体变量或使用new来实例化结构对象,然后通过结构体变量.结构成员名,或结构对象.结构成员的方式来使用结构。,【范例4-5】 定义表示学生信息的结构Student并使用。,01 struct Student /定义结构Student 02 /结构的成员变量 03 public String stuNum; /定义结构成员表示学生学号 04 public String stuName; /定义结构成员表示学生姓名 05 public int stuAge; /定义结构成员表示学生年龄 06

23、 public int stuClass; /定义结构成员表示学生班级 07 public int stuGrade; /定义结构成员表示学生年级 08 public Student(string stuNum, string stuName, int stuAge, int stuClass,int stuGrade) 09 /结构的构造函数,用参数给结构中的成员赋值 10 this.stuNum = stuNum; /将参数stuNum赋给this.stuNum 11 this.stuName = stuName; /将参数stuName赋给this.stuName 12 this.stu

24、Age = stuAge; /将参数stuAge赋给this.stuAge 13 this.stuClass = stuClass; /将参数stuClass赋给this.stuClass 14 this.stuGrade = stuGrade; /将参数stuGrade赋给this.stuGrade 15 16 public void DoHomework() /结构中的方法 17 18 /结构中的方法 19 20 ,4.4.2 类和结构的关系,类和结构实际上都是创建对象的模板,都可以包含构造函数,常数,字段,方法,属性,索引器和运算符等成员。二者的主要区别如下。 结构是值类型,类是引用类型

25、,在内存中结构是存储在堆栈上的值类型,类是存储在堆(heap)上的引用类型。 结构的构造函数和类的构造函数不同:.结构不能包含显式的无参数构造函数,结构成员会自动初始化为它们的默认值,.结构不能包含以下形式的初始值设定类:base(参数列表)。 对于结构中的实例字段成员,不能在声明时赋值初始化。 声明了结构类型后,可以使用new运算符创建构造对象,也可以不使用new关键字。如果不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。 结构不支持继承,即一个结构不能从另一个结构或类继承,而且不能作为一个类的基类。,第4章主流软件开发方法 面向对象入门, 类的定义和类的成员 对象

26、的创建和使用 分部类 结构和类 命名空间,4.5 命名空间,C# 程序是利用命名空间组织起来的。命名空间既用作程序的“内部”组织系统,又用作“外部”组织系统(一种将已向其他程序公开的程序元素进行展示的方式)。就像一个城市为了便于管理,分成多个区一样,每个区就类似于一个命名空间。,4.5.1 声明命名空间,命名空间是.NET避免类名冲突的一种方式。例如,定义类Customer来表示一个顾客,同时其他人也可以定义一个Customer类,只要二者不在同一个命名空间中就不会引起名称冲突。一个命名空间中,可以有多个类,结构,接口等,在同一命名空间中,类名不能有相同的。 C#中,使用namespace来定

27、义命名空间,格式如下。 Namespace 定义的命名空间名称 /命名空间体 ,例如定义命名空间,1 namespace Example4_6 /定义命名空间,该命名空间中有一个Program类和Student结构 2 3 class Program /命名空间中的类 4 5 static void Main(string args) 6 7 / Console.ReadKey(); 8 9 10 struct Student命名空间中的结构 11 12 /结构的成员变量 13 14 ,4.5.2 using关键字,把一个类型放在命名空间中,可以有效地给这个类型指定一个较长的名称,该名称包括类

28、型的命名空间,后面是句点“.”和类的名称,如可以这样使用MessageBox消息框的Show方法,System.Windows.Forms.MessageBox.Show(“Hello, C#!”)就像这样称呼一个人“中国.北京.西城区.张三”一样,使用起来很不方便,可用using关键字引入其命名空间,使用时就不需要带很长的一串名称了,导入命名空间的语法是: using 命名空间名称; 引入命名空间后,就可以在代码中直接使用被引入命名空间中类型的名字了。,using System.Windows.Forms ; MessageBox.Show(“Hello, C#!”); 否则则要这样写: System.Windows.Forms.MessageBox.Show(“Hello, C#!”);,ByeBye,跟我上机,在C#中编写一个控制台应用程序,实现以下功能:设计一个Rectangle 类,提供通过length 和 width 字段计算面积和周长的2 个方法。并用main 方法来测试程序。,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报