您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第六章 面向对象编程基础
第六章面向对象编程基础本章目标面向对象编程的介绍类的定义和对象的声明类的成员访问控制属性静态成员方法构造函数和析构函数常量索引器运算符重载面向对象编程的基本概念面向对象编程(Object-OrientedProgramming)简称OOP技术。面向对象编程的总体思路是:将数据及处理这些数据的操作都封装到一个称为类(Class)的数据结构中,在程序中使用的是类的实例——对象。对象是代码与数据的集合,是封装好了的一个整体,对象具有一定的功能。程序是由一个个对象构成的,对象之间通过一定的“相互操作”传递消息,在消息的作用下,完成特定的功能。对象=(算法+数据结构)程序=(对象+对象)面向对象编程的特点面向对象编程方式具有封装、继承及多态性等特点。封装性:类是属性和方法的集合,为了实现某项功能而定义类后,开发人员并不需要了解类体中的每句代码的具体含义,只需通过对象来调用类中的某个属性或方法即可实现某项功能,这就是类的封装性。例如:在使用电脑时,并不需要将电脑拆开了解每个部件的作用,用户只需按下Power键就可以启动电脑,在键盘上敲打就可以将文字输入到电脑,但电脑内部的构造用户可能不需要了解,这就是封装性的具体体现。通过继承可以创建子类和父类之间的层次关系,子类可以从其父类中继承属性和方法。例如:水果看成父类,那么水果具有颜色属性,然后定义一个苹果类,在定义苹果类时完全可以不定义苹果类的颜色属性,通过继承,苹果具有了水果类的颜色属性。class水果类{public颜色//在水果类中定义的颜色属性}class苹果类:水果类{//在苹果类中定义其他的属性和方法}继承性多态性类的多态指不同的类进行同一操作可以有不同的行为。例如:定义了一个汽车类和火车类,他们都可以移动,说明了两者在这方面可以进行相同的操作。然而,火车和汽车的移动是截然不同的,因为火车必须在铁轨上行驶,而汽车在公路上行驶。类的定义和对象的声明类的定义:通常把具有同样性质和功能的东西所构成的集合叫作类。类是C#程序设计的基本单位,用类声明的变量称为”类的实例”或”类的对象”.类和对象:1.类是一种类型定义;对象则是该类型的一种实例,在程序运行时创建。2.类是一种数据结构,用来模拟现实中存在的对象和关系,包含静态的属性和动态的方法。示例:所有学生都具有共同的行为(考试和上课)和基本的属性(学号,所在的班级等)。[类修饰符]class类名[:基类类名]{成员定义列表;(编写属性,方法,事件等代码)}注意:除了class关键字和类名外,剩余的都是可选的。类修饰符可以是abstract,sealed,public,protected,internal之一。abstract:抽象类,不允许建立类的实例,只能继承。sealed:密封类,不允许被继承,只能实例化,只能在当前项目中访问public:不限制对该类的访问,类可在任何地方访问。protected:对其所在的类以及类的子类进行访问。internal:只能在当前项目中访问(默认值)。类的声明对象:是从类定义实例化,这表示创建类的一个实例.声明对象:类名对象名;例如:Students;//声明一个Student类的对象s实例化对象:在声明对象之后,需要使用new关键字将对象实例化。对象名=new类名();例如:s=newStudent();//实例化s,为s分配内存空间访问对象:访问对象,实质就是访问对象成员,使用”.”运算符。例如:s.age=22;//给s的数据成员赋值对象的创建类的基本成员及访问控制1.字段(域):存储要满足其设计所需要的数据。2.属性:提供灵活的机制来读取,设置或计算私有或受保护字段的值。3.方法:方法是对象能够执行的一些操作,它体现了对象的功能。4.构造函数和析构函数:对对象进行初始化和回收资源。5.事件:由类产生的通知,用于说明发生了什么事情。6.索引器:允许编程人员在访问数组时,通过索引器访问类的多个实例。又称下标指示器。7.运算符:定义类的实例能使用的运算符。8.常量:用来定义与类相关的常量值。类的成员访问控制:在编写程序时,可以对类的成员使用不同的访问修饰符,从而定义它们的访问级别,即类成员的可访问性(Accessibility)。在C#中,根据类成员的可访问性可以把类成员分成四类,分别是公有成员(public)、私有成员(private)、保护成员(protected)、内部成员(internal)。访问修饰符public:表示公共访问,它是允许访问的最高级别。共有成员可以在代码的任何位置对其进行访问。private:表示私有访问,私有成员只能在声明自身的类中的才能进行访问(如果没有使用任何关键字,就默认使用这个关键字)protected:表示受保护的访问,受保护的成员只能由其所在的类中访问并且可以由派生类中的代码去访问internal:成员只能由定义它的项目(程序集)内部的代码访问。成员访问修饰符classStudent{//声明两个字段stringname=“”;intage=22;//返回姓名的方法publicstringgetName(){returnname;}}//类实例化Students=newStudent();Console.WriteLine(s.getName());//访问字段Console.WriteLine(s.name);类的静态成员和实例成员类的成员又可以分成静态成员和非静态成员。在声明成员时,如果在语句前加上static保留字,则该成员是静态成员,如果没有static保留字,则成员是非静态成员。二者最重要的区别是:静态成员属于类所有,非静态成员属于类的实例所有,所以又称实例成员。属性对私有或保护成员常见的访问就是读取或设置数据值,在类定义的外部,这种访问可以通过属性成员实现。定义属性:AccessModifyTypePropertyName{get{//取值代码}set{//赋值代码}}注意:如果只提供get方法,则该属性为只读;如果只提供set方法,则该属性为只写.只写属性适合于保护密码这样的敏感数据.C#中建议通过属性访问字段.示例:定义一个student类,将字段的访问控制设为private,通过属性控制在类外访问字段的权限.属性使用classStudent{privatestringid;privatestringname;//id的属性publicstringID{get{returnid;//返回读取的值}set{id=value;//value是一个关键字,表示要写入的数据成员的值}}}通过属性设置访问数据成员classProgram{staticvoidMain(string[]args){Students=newStudent();//用属性设置修改数据成员的值(set)s.ID=123456;s.Name=bill;//用属性设置获取数据成员的值(get)Console.WriteLine(ID={0},Name={1},s.ID,s.Name);}}方法方法是一种用于实现可由对象或类执行的计算或操作的成员。方法是类成员的一种,通常称为函数成员。类的方法主要是和类相关联的动作,它是类的外部界面,对于那些私有的字段来说,外部界面实现对它们的操作一般只有通过方法来实现。通过方法的调用,使不同类之间可以相互沟通,完成所要执行的运算或者特定的工作。方法的定义声明[attributes][method-modifiers]returnTypemember([formal-parameter-list]){block…}参数说明:attributes:表示访问修饰符,通常把所有方法都定义为publicmethod-modifiers:表示修饰符returnType:返回值类型member:表示方法的名称formal-parameter-list:用逗号隔开的类型,标识符(参数)block:表示方法体注意:如果方法没有返回值,其返回的类型必须是void无参方法示例代码:publicstaticvoidadd(){inta,b,c;a=1;b=2;c=a+b;Console.WriteLine(c);}publicstaticintadd(){inta,b,c;a=1;b=2;c=a+b;returnc;}方法的参数调用方法时,可以给该方法传递一个或多个值。实参:传给方法的值叫做实参。形参:在方法内部,接受实参的变量叫做形参。形参在紧跟着方法名的括号中声明。示例代码:classProgram{staticvoidMain(string[]args){Console.WriteLine(country(中国人));}//定义一个country静态方法,返回值为stringpublicstaticstringcountry(stringstrCountry){return我是+strCountry;}}方法的参数的类型值参数:声明时不带修饰符的参数是值参数。在方法内对值参数的操作不会改变传给方法时变量的值。因为将值类型传递给方法时,传递的是副本而不是对象。引用参数(ref):如果要传递原值并修改它,使用引用参数。因为在传递一个变量给方法而不仅仅是传递的是它的值。在传递时变量必须被初始化。输出参数(out):用来返回一个结果,与引用参数参数的区别在于它不必初始化。参数数组(params):在方法的参数列表中只允许出现一个参数数组而且在方法同时具有固定参数和参数数组的情况下,参数数组必须放在整个参数列表的最后,并且参数数组只允许是一维数组。静态方法和非静态方法方法分为静态方法和非静态方法,若一个方法声明中含有static修饰符,则称该方法为静态方法,若没有static修饰符,则称该方法为非静态方法。两者的区别在于static修饰的静态方法属于类所有,可以通过类名访问,而没有static修饰的方法属于类的实例所有,可以通过实例进行访问。方法的重载方法重载:方法签名由方法名称和一个参数列表(参数的类型和顺序)组成,只要签名不同,就可以在一个类中定义具有相同名称的多个方法,当定义两种或两种以上具有相同名称的方法时,就称为方法重载。调用时,编译器根据参数的设置就可以判断在哪种情况下调用哪种方法。特点:1.调用同一方法名2.但各方法中的参数的数据类型,个数,或顺序不同。构造函数和析构函数构造函数和析构函数是类中比较特殊的两种成员函数,主要用来对对象进行初始化和回收对象资源。一般来说,对象的生命周期从构造函数开始,以析构函数结束。如果一个类含有构造函数,在实例化该类的对象时就会调用,如果含有析构函数,则会在销毁对象时调用它。析构函数和构造函数的名字相同,但析构函数要在名字前加一个波浪号(~)。当退出含有该对象的成员时,析构函数就会自动释放这个对象所占用的内存空间。构造函数使用new关键字来创建一个对象时,公共语言运行库必须使用那个类的定义来构造对象。并且必须从操作系统中申请一个内存区域,在其中填充类定义字段,然后调用构造函数来执行任何必要的初始化。一个类可以具有多个构造函数,如果用户没有为类定义构造函数,编译器就会自动生成一个默认的构造函数,当然这个默认的构造函数不会执行任何操作。声明构造函数构造函数主要用来初始化类的实例,声明构造函数是一个特殊的方法,与一般的方法相比,构造函数的名字必须和类的名字相同,可以具有0个或多个参数并且没有返回值(包括void类型)。示例:classTaxi{publicTaxi(){//初始化对象的数据成员}}注意:不带参数的构造函数称为“默认构造函数”,无论何时,只要使用new运算符实例化对象,并且不为new提供任何参数,就会调用默认构造函数构造函数重载构造函数和方法一样可以重载,重载构造函数为创建对象
本文标题:第六章 面向对象编程基础
链接地址:https://www.777doc.com/doc-4249855 .html