C#面向对象初级编程.ppt
《C#面向对象初级编程.ppt》由会员分享,可在线阅读,更多相关《C#面向对象初级编程.ppt(87页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章 C#面向对象初级编程 面向对象得程序设计越来越受到编程人员的喜爱。类和对象是面向对象程序设计中的重要概念。封装性、继承性和多态性是面向对象的特点,本章旨在全面说明C#编写面向对象程序设计的方法。3.1 面向对象的基本概念面向对象的基本概念 早期的程序设计方法多为面向过程的程序设计思想(早期的程序设计方法多为面向过程的程序设计思想(POPPOP,Procedure-Oriented ProgrammingProcedure-Oriented Programming),在这种设计方法下,编程人员),在这种设计方法下,编程人员的主要任务是把一个处理分解成若干个过程,然后编写这些过程。每的主要
2、任务是把一个处理分解成若干个过程,然后编写这些过程。每个过程都基于某些特定的算法。对于个过程都基于某些特定的算法。对于C C语言来说就是编写一个个函数,语言来说就是编写一个个函数,每个函数的数据和程序代码是分离的,当修改某段程序时,所有与之每个函数的数据和程序代码是分离的,当修改某段程序时,所有与之有关的部分都需要作相应的调整。随着问题规模的增大,程序变得容有关的部分都需要作相应的调整。随着问题规模的增大,程序变得容易出错,而且越来越难以管理。这种面向过程的程序设计语言有易出错,而且越来越难以管理。这种面向过程的程序设计语言有C C、PascalPascal、BasicBasic等。等。面向对
3、象的程序设计(面向对象的程序设计(OOPOOP,Object-Oriented ProgrammingObject-Oriented Programming)则)则是一种基于结构分析的、以数据为中心的程序设计方法。它的主要思是一种基于结构分析的、以数据为中心的程序设计方法。它的主要思想是将数据及处理这些数据的操作都封装(想是将数据及处理这些数据的操作都封装(EncapsulationEncapsulation)到一个称)到一个称为类(为类(ClassClass)的数据结构中。使用这个类时,只需要定义一个类的变)的数据结构中。使用这个类时,只需要定义一个类的变量即可,这个变量叫做对象(量即可,这
4、个变量叫做对象(ObjectObject)。通过调用对象的数据成员完)。通过调用对象的数据成员完成对类的使用。这类编程思想较好地适应了现实世界中的问题,因而成对类的使用。这类编程思想较好地适应了现实世界中的问题,因而得以广泛应用。得以广泛应用。3.1.1 对象和类对象和类在我们的日常生活中,对象是指可辨识的一种实体。例如汽车、在我们的日常生活中,对象是指可辨识的一种实体。例如汽车、房子、书、文档和支票等。为了进一步说明,可以把对象看作是用于房子、书、文档和支票等。为了进一步说明,可以把对象看作是用于在程序中表示的一个实体。因此对象可以包括把有生命的在程序中表示的一个实体。因此对象可以包括把有生
5、命的“对象对象”人、员工、客户,以及更抽象的人、员工、客户,以及更抽象的“对象对象”公司、数据库和国家公司、数据库和国家等。等。面向对象程序设计(面向对象程序设计(OOPOOP)通过使用真实世界的对象实例概念,)通过使用真实世界的对象实例概念,改变了应用程序处理问题的模式。非面向对象的传统程序语言,必须改变了应用程序处理问题的模式。非面向对象的传统程序语言,必须针对特定问题开发应用程序,一旦所处理的问题脱离了原先考虑设计针对特定问题开发应用程序,一旦所处理的问题脱离了原先考虑设计的范围,就得扩充应用程序得功能以面对新产生的问题;而在这种情的范围,就得扩充应用程序得功能以面对新产生的问题;而在这
6、种情形下,整个应用程序不是大幅改写就是必须重新开发。形下,整个应用程序不是大幅改写就是必须重新开发。OOPOOP程序设计程序设计理论的出现,解决了这样的缺陷,其中关键就在于对象的使用。理论的出现,解决了这样的缺陷,其中关键就在于对象的使用。我们可以设计不同的对象,处理应用程序所要解决的各种问题,我们可以设计不同的对象,处理应用程序所要解决的各种问题,其中最大的好处在于应用程序可以轻易地针对新的问题进行扩充处理,其中最大的好处在于应用程序可以轻易地针对新的问题进行扩充处理,只要修改原有的对象或是加入新定义的对象,完全不用重新改写原有只要修改原有的对象或是加入新定义的对象,完全不用重新改写原有的应
7、用程序。的应用程序。OOPOOP得对象概念,使得开发应用程序得复杂度与难度,得对象概念,使得开发应用程序得复杂度与难度,不会随着程序规模的扩大,变得难以处理与掌握。不会随着程序规模的扩大,变得难以处理与掌握。类是一组具有相同数据结构和相同操作的对象的集合。类是一组具有相同数据结构和相同操作的对象的集合。类是一系列具有相同性质的对象的抽象,是对对象共同特类是一系列具有相同性质的对象的抽象,是对对象共同特征的描述。比如每一辆汽车是一个对象的话,所有的汽车征的描述。比如每一辆汽车是一个对象的话,所有的汽车可以作为一个模板,我们就定义汽车这个类。可以作为一个模板,我们就定义汽车这个类。在一个类中,每个
8、对象都是类的实例,可以使用类中在一个类中,每个对象都是类的实例,可以使用类中提供的方法。从类定义中产生对象,必须有建立实例的操提供的方法。从类定义中产生对象,必须有建立实例的操作,作,C+C+和和C#C#中的中的newnew操作符可用于建立一个类的实例,操作符可用于建立一个类的实例,C#C#为我们提供的方法则更加安全。为我们提供的方法则更加安全。3.1.2 继承继承继承是使用己存在的定义作为基础建立新定义的技术。继承是使用己存在的定义作为基础建立新定义的技术。新类的定义可以是即存类所声明的数据和新类所增加的声新类的定义可以是即存类所声明的数据和新类所增加的声明组合。新类复用即存的定义,而不要求
9、修改即存类。即明组合。新类复用即存的定义,而不要求修改即存类。即存类可以作为基类来引用,而新类可以作为派生类来引用。存类可以作为基类来引用,而新类可以作为派生类来引用。这种复用技术大大降低了软件的开发费用。这种复用技术大大降低了软件的开发费用。例如,汽车作为一个类己经存在,作为具有自身特征例如,汽车作为一个类己经存在,作为具有自身特征的卡车就可以从汽车类中继承。它同汽车一样,具有颜色、的卡车就可以从汽车类中继承。它同汽车一样,具有颜色、重量这些特征,可以行驶和鸣笛。它还具有一般汽车不一重量这些特征,可以行驶和鸣笛。它还具有一般汽车不一定具有的特征,比如可以载货等。定具有的特征,比如可以载货等。
10、3.1.3 封装封装一般来说,程序员都力求软件工程系统的高一般来说,程序员都力求软件工程系统的高集成性。一个具有高集成性的软件系统包含着各集成性。一个具有高集成性的软件系统包含着各种执行独立任务的成分,而每一个独立任务都是种执行独立任务的成分,而每一个独立任务都是整个系统的重要组成部分。相反,如果一个软件整个系统的重要组成部分。相反,如果一个软件系统的集成性差,那么系统所包含的各种成分由系统的集成性差,那么系统所包含的各种成分由于没有很好的被定义而往往会容易发生冲突。于没有很好的被定义而往往会容易发生冲突。封装可以将对象相关的信息集中存放在一个封装可以将对象相关的信息集中存放在一个独立的单元中
11、,因此,用一个标识符就可以访问独立的单元中,因此,用一个标识符就可以访问对象,还可以把整个对象作为一个变量参数传送对象,还可以把整个对象作为一个变量参数传送给函数。给函数。3.1.4 多态多态多态性是指用一个名字定义不同的函数,这多态性是指用一个名字定义不同的函数,这函数执行不同但又类似的操作,从而实现函数执行不同但又类似的操作,从而实现“一个一个接口,多种方法接口,多种方法”。多态性的实现与静态联编、动态联编有关。多态性的实现与静态联编、动态联编有关。静态联编支持的多态性称为编译时的多态性,也静态联编支持的多态性称为编译时的多态性,也称静态多态性,它是通过函数重载和运算符重载称静态多态性,它
12、是通过函数重载和运算符重载实现的。动态联编支持的多态性称为运行时的多实现的。动态联编支持的多态性称为运行时的多态性,也称动态多态性,它是通过继承和虚函数态性,也称动态多态性,它是通过继承和虚函数实现的。实现的。3.2 C#中的类与对象中的类与对象3.2.1 3.2.1 在在在在C#C#中定义类中定义类中定义类中定义类类的声明格式如下:类的声明格式如下:类修饰符类修饰符 class class 类名类名 :基类名:基类名 类的成员类的成员;类的修饰符可以是以下几种之一或者是它们类的修饰符可以是以下几种之一或者是它们的组合(在类的声明中同一修饰符不允许出现多的组合(在类的声明中同一修饰符不允许出现
13、多次):次):newnew新建类,仅允许在嵌套类声明时使用,表新建类,仅允许在嵌套类声明时使用,表明类中隐藏了由基类中继承而来的、与基类中同名的成员。明类中隐藏了由基类中继承而来的、与基类中同名的成员。publicpublic公有类,表示不限制对该类的访问。公有类,表示不限制对该类的访问。protectedprotected一一保护类,表示只能从所在类和所在类保护类,表示只能从所在类和所在类派生的子类进行访问。派生的子类进行访问。internalinternal内部类,只有其所在类才能访问。内部类,只有其所在类才能访问。privateprivate私有类,只有对包私有类,只有对包.Net.Ne
14、t中的应用程序或中的应用程序或库才能访问。库才能访问。abstractabstract抽象类,不允许建立类的实例。抽象类,不允许建立类的实例。sealedsealed密封类,不允许被继承。密封类,不允许被继承。以上类修饰符可以两个或多个。以上类修饰符可以两个或多个。使用使用newnew关键字可以建立类的一个实例,比如下面的代码:关键字可以建立类的一个实例,比如下面的代码:class Aclass A class Bclass B void Fun void Fun A a;A a;a=new A a=new A()();在类在类B B的方法的方法FunFun中创建了一个类中创建了一个类A A的
15、实例。的实例。我们使用如下代码表示类我们使用如下代码表示类B B从类从类A A中继承:中继承:class Aclass A class B:A class B:A 有关有关C#C#中的继承机制我们放在后面的章节中进行详细讨论,在中的继承机制我们放在后面的章节中进行详细讨论,在这里要事先声明的一点是:这里要事先声明的一点是:C#C#中的类只支持单继承。中的类只支持单继承。3.2.2 访问修饰符访问修饰符类的成员有以下类型:类的成员有以下类型:成员常量,代表与类相关的常量值。成员常量,代表与类相关的常量值。域,即类中的变量。域,即类中的变量。成员方法,完成类中各种计算或功能的操作。成员方法,完成类
16、中各种计算或功能的操作。属性,用于定义类中的值,并对它们提供读、写操作。属性,用于定义类中的值,并对它们提供读、写操作。事件,用于说明发生了什么事情。事件,用于说明发生了什么事情。索引指示器,允许编程人员在访问数组时,通过索引指示器访索引指示器,允许编程人员在访问数组时,通过索引指示器访问类的多个实例。问类的多个实例。操作符,定义类中特有的操作。操作符,定义类中特有的操作。构造函数,在类被实例化时首先执行的函数,主要是完成对象构造函数,在类被实例化时首先执行的函数,主要是完成对象初始化操作。初始化操作。析构函数,在对象被销毁之前最后执行的函数,主要是完成对析构函数,在对象被销毁之前最后执行的函
17、数,主要是完成对象结束时的收尾操作。象结束时的收尾操作。包含有可执行代码的成员被认为是类中的包含有可执行代码的成员被认为是类中的函数成员函数成员,这些函数成,这些函数成员有方法、属性、索引指示器、操作符、构造函数和析构函数。员有方法、属性、索引指示器、操作符、构造函数和析构函数。在编写程序时,我们可以对类的成员使用不同的访问修饰符,从在编写程序时,我们可以对类的成员使用不同的访问修饰符,从而定义它们的访问级别。而定义它们的访问级别。(1 1)公有成员)公有成员C#C#中的公有成员提供了类的外部界面,允许类的使用者从内部中的公有成员提供了类的外部界面,允许类的使用者从内部或外部直接进行访问。公有
18、成员的修饰符为或外部直接进行访问。公有成员的修饰符为publicpublic,这是限制最少的,这是限制最少的一种访问方式。它的优先是使用灵活,缺点是外界可能会破坏对象成一种访问方式。它的优先是使用灵活,缺点是外界可能会破坏对象成员值得合理性。员值得合理性。(2 2)私有成员私有成员C#C#中的私有成员仅限于类中的成员可以访问,从类的外部访问中的私有成员仅限于类中的成员可以访问,从类的外部访问私有成员是不合法的。如果在声明中没有出现成员的访问修饰符,按私有成员是不合法的。如果在声明中没有出现成员的访问修饰符,按照默认方式成员为私有的。私有成员的修饰符为照默认方式成员为私有的。私有成员的修饰符为p
19、rivateprivate。(3 3)保护成员)保护成员为了方便派生类的访问,又希望成员对于外界是隐藏的,这时可为了方便派生类的访问,又希望成员对于外界是隐藏的,这时可以使用以使用protectedprotected修饰符,声明成员为保护成员。修饰符,声明成员为保护成员。(4 4)内部成员)内部成员使用使用internalinternal修饰符的类的成员是一种特殊的成员。这种成员对修饰符的类的成员是一种特殊的成员。这种成员对于同一包中的应用程序或库是透明的,而在包于同一包中的应用程序或库是透明的,而在包.Net.Net之外是禁止访问的。之外是禁止访问的。使用下面的例子说明一下类的成员的访问修饰
20、符的用法。使用下面的例子说明一下类的成员的访问修饰符的用法。程序清单:程序清单:class ClassAclass ClassA public int a;public int a;private int b;private int b;protected int c;protected int c;public void SetA public void SetA()()a=1;/a=1;/正确,允许访问类自身公有成员正确,允许访问类自身公有成员 b=2;/b=2;/正确,允许访问类自身私有成员正确,允许访问类自身私有成员 c=3;/c=3;/正确,允许访问类自身保护成员正确,允许访问类自身
21、保护成员 class ClassB:Aclass ClassB:A public void SetB()public void SetB()ClassA BaseA=new ClassA();ClassA BaseA=new ClassA();BaseA.a=11;/BaseA.a=11;/正确,允许访问基类公有成员正确,允许访问基类公有成员 BaseA.b=22;/BaseA.b=22;/错误,不允许访问基类私有成员错误,不允许访问基类私有成员 BaseA.c=33;/BaseA.c=33;/正确,允许访问基类保护成员正确,允许访问基类保护成员 class ClassCclass Class
22、C public void AetB()public void AetB()ClassA BaseA=new ClassA();ClassA BaseA=new ClassA();BaseA.a=111;/BaseA.a=111;/正确,允许访问类的其他公有成员正确,允许访问类的其他公有成员 BaseA.b=222;/BaseA.b=222;/错误,不允许访问类的其他私有成员错误,不允许访问类的其他私有成员 BaseA.c=333;/BaseA.c=333;/错误,不允许访问类的其他保护成员错误,不允许访问类的其他保护成员 (5 5)thisthis保留字保留字保留字保留字thisthis仅限
23、于在构造函数、类的方法和类的实例中使用,它仅限于在构造函数、类的方法和类的实例中使用,它有以下含义:有以下含义:在类的构造函数中出现的在类的构造函数中出现的thisthis作为一个值类型,它表示对正在作为一个值类型,它表示对正在构造的对象本身的引用。构造的对象本身的引用。在类的方法中出现的在类的方法中出现的thisthis作为一个值类型,它表示对调用该方作为一个值类型,它表示对调用该方法的对象的引用。法的对象的引用。在结构的构造函数中出现的在结构的构造函数中出现的thisthis作为一个变量类型,它表示对作为一个变量类型,它表示对正在构造的结构的引用。正在构造的结构的引用。在结构的方法中出现的
24、在结构的方法中出现的thisthis作为一个变量类型,它表示对调用作为一个变量类型,它表示对调用该方法的结构的引用。该方法的结构的引用。除此以外,在其已地方使用除此以外,在其已地方使用thisthis保留字都是不合法的。保留字都是不合法的。案例案例案例案例:thisthis保留字的使用保留字的使用目标目标目标目标:学习保留字:学习保留字thisthis的使用方法的使用方法步骤步骤步骤步骤:1 1、启动、启动VS.NETVS.NET,新建一个控制台应用程序,名称填写为,新建一个控制台应用程序,名称填写为“ThisTestThisTest”,位置设置为,位置设置为“c:CSharpSamplesc
25、hp3c:CSharpSampleschp3。2 2、在代码设计窗口中编辑、在代码设计窗口中编辑Class1.csClass1.cs。在其中的代码如下:。在其中的代码如下:using System;using System;namespace thistestnamespace thistest class Class1class Class1 public int x;public int x;public void aaa()public void aaa()x=5;x=5;Console.WriteLine(The value of x is:0,x);Console.WriteLine
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 面向 对象 初级 编程
限制150内