您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 面向对象相关概述-我学院网唐旭东.
面向对象的思想1面向对象程序设计的基本概念类和对象属性、方法与事件封装继承多态性类和对象在C#中,class为类的关键字。把属于类的对象称为类的实例,可以把类看成是对象的模板,把对象看成是类的实例。1、类的声明【格式】:[类修饰符]class类名[:基类类名]{成员定义列表;}【功能】:定义一个由“类名”指定的类。修饰符作用说明new只能用于嵌套的类,表明隐藏了由基类中继承而来的、与基类中同名的成员public公有类,表示外界可以不受限制的访问该类protected保护类,表示该类只能被这个类的成员或派生类成员访问internal表示该类能够由程序集中的所有文件使用,而不能由程序集以外的对象使用private该类只能被这个类的成员访问abstract抽象类,该类含有抽象成员,因此不能被实例化,只能作为基类sealed密封类,不能从这个类再派生出其他类31)支持的类修饰符42)如果缺省类修饰符,默认为private。3)“基类类名”——指定派生该类的基类,如果该类没有从任何类继承,则不需要该选项。4)“成员定义列表”——类成员有两部分组成:一个是新声明的类成员;另一个则是直接从它的基类继承而来的成员。类成员声明主要包括:常数、字段、方法、属性、事件、索引器、运算符、构造函数、析构函数等。类成员声明中的访问修饰符:public、private、protected、internal中。默认访问修饰符为private。5字段:字段是与类相关的变量,相当于C++中的变量。常量:用来定义与类相关的常量值。事件:是类的成员,它可以让对象通知调用者某些特定的行为发生时间。方法:完成类中各种计算或功能的操作,类似函数。属性:定义类的特征,并对他们提供读、写操作。类成员的组成:6索引器:允许编程人员在访问数组时,通过索引器访问类的多个实例。又称下标指示器。运算符:定义类的实例能使用的运算符。构造函数:在类被实例化时首先执行的函数,主要完成对象初始化操作。析构函数:在对象被销毁之前最后执行的函数,主要是完成对象结束时的收尾操作。7例:成员常量的声明关键字const用于声明常量,后跟数据类型的声明。类的常量可以加上new、public、protected、internal或private修饰。ClassA{publicconstdoubleA=1.0;publicconstdoubleX=1.0,Y=2.0,Z=3.0;}82、类的静态成员和实例成员静态成员:有static,属于类所有,只能通过类名来访问。实例成员:没有static,属于类的实例所有,又称实例成员,只能通过类的实例—对象来访问。91.usingSystem;2.classExample13.{4.staticpublicinta;//静态成员5.publicintb;//实例成员6.voidMeth1()//实例方法7.{8.a=10;//实例方法中可以访问本类的静态成员9.b=20;//实例方法中可以访问本类的实例成员10.}11.staticvoidMeth2()12.{13.a=30;//静态方法能够访问本类的静态成员14.//b=40;//静态方法不能访问本类的实例成员15.}10【格式】:类名实例名=new类名([参数]);【功能】:生成一个由“类名”指定的类的名为“实例名”的实例,如果有参数则将参数传递给构造函数。【说明】:1)、new关键字实际上是调用构造函数来完成实例的初始化工作。3、对象的声明•对象相当于现实世界中的实体•在指定一个类后,往往把属于这个类的对象称为类的实例,可以把类看成是对象的模板,把对象看成是类的实例。•比如:人和张三;int和10112)、创建实例也可以分为两步:先定义实例变量,然后用new关键字创建实例。类名实例名;//定义类的实例变量实例名=new类名([参数]);//创建类的实例。如:StudentStu1=newStudent();等价于:StudentStu1;Stu1=newStudent();类的构造函数和析构函数12C#中有两个特殊的函数:构造函数、析构函数。构造函数:是在创建类的实例(也就是对象)时首先执行的函数。析构函数:是当实例(对象)从内存中销毁前最后执行的函数。这两个函数的执行是无条件的,系统会自动在创建对象时调用构造函数,在销毁对象时调用析构函数,而不需要程序员通过代码调试。13构造函数作用:为对象分配存储空间,完成初始化操作(给类的成员变量赋值等)。构造函数有如下规则:1)构造函数的函数名和类的名称一样。2)当某个类没有构造函数时,系统将自动为其创建默认构造函数。example1(){};3)构造函数的访问修饰符总是public。如果是private,则表示这个类不能被实例化,这通常用于只含有静态成员的类中。4)构造函数不用声明返回类型。5)构造函数可以带参数也可以不带参数。析构函数析构函数用于析构类的实例。不能在结构中定义析构函数。只能对类使用析构函数。一个类只能有一个析构函数。无法继承或重载析构函数。无法调用析构函数。它们是被自动调用的。析构函数既没有修饰符,也没有参数。声明方法15访问修饰符(可选),默认情况下为private[访问修饰符]返回类型方法名([参数列表]){//方法主体}如果不需要返回任何值,方法需定义为void数据类型方法头不是一条语句,其后不能跟分号“;”“形式参数说明列表”是一个由逗号分隔开的列表16方法的调用:有三种格式:【格式1】:方法名([实际参数类表])【格式2】:对象名.方法名([实际参数类表])【格式3】:类名.方法名([实际参数类表])格式三只能调用非本类的另一个类的静态方法。17【说明】:1)调用方法时,如果方法有形式参数,在调用时应在“()”中使用实际参数。2)没有返回值的方法——作为一条语句;有返回值的方法——方法的调用相当于一个同类型的数据,可以作为表达式或表达式的一部分参与运算。18静态方法和非静态方法:•定义静态时用static修饰•不能用virtual、abstract或override修饰符。•非静态方法可以访问类中包括静态成员在内的所有成员,而静态方法只能访问类中的静态成员。19方法重载与覆盖(同类重载,继承覆盖)1)重载重载是面向对象的一个重要特征,通过重载可以使多个具有相同功能但是参数不同的方法共享同一个方法名。方法重载的实现:在一个类中两次或多次定义同名的方法(包括从基类继承而来的方法),但每个方法的参数类型或个数不同;用户调用方法时,系统能够自动识别应调用的方法。202)覆盖(new或者virtual+override)在一个有继承关系的类层次结构中,类中的方法由两部分组成,一个是类体中声明的方法,另一个则是直接从它的基类继承而来的方法。但派生类很少会一成不变的继承基类中所有的方法,如果需要对基类的方法作出修改,就要在派生类中对基类方法进行覆盖。(编译时实现多态)有两种覆盖方式:一种是用关键字new修饰派生类中与基类同名的方法,这样基类中的同名方法会被隐藏;另一种更为灵活和有效的途径是首先将基类的方法用关键字virtual修饰为虚拟方法,再由派生类用关键字override修饰同名的方法,表明是对基类的虚拟方法重载。(运行时多态,动态绑定)21虚方法使用注意事项:1)不能将虚方法声明为静态的,因为多态性是针对对象的,不是针对类的。2)不能将虚方法声明为私有的,因为私有方法不能被派生类覆盖。3)覆盖方法必须与它相关的虚方法匹配,也就是说,它们的方法签名(方法名称、参数个数、参数类型)、返回类型以及访问属性都应该完全一致。运算符重载:22系统对大部分运算符都给出了常规定义但可以根据需要给这些运算符赋予一个新的含义,这就是运算符的重载。23【格式】:返回类型值operator运算符(运算对象列表){重载的实现部分;};【说明】:1)、返回类型可以是任意合法的C#类型修饰符,或自定义类型,在方法实现部分通过return语句返回该数据类型的数据。2)、在C#中,可以重载的运算符主要有:+,-,!,~,++,--,true,false,*,/,%,&,|,^,,,==,!=,,,=,=。3)、不能重载的运算符有:=,&&,||,?:,new,typeof,sizeof,is。24属性属性是对现实世界中实体特征的抽象,它提供了一种对类或对象特征进行访问的机制。如:一个窗口的标题、一个控件的尺寸。与域相比,属性具有良好的封装性。属性不允许直接操作类的数据内容,而是通过访问器进行访问(使用get和set对属性的值进行读写)。25【格式】:[属性修饰符]类型说明符属性名{访问声明}【说明】:1)属性修饰符有new,public,protected,internal,private,static,virtual,override和abstract9种。2)访问声明用来声明属性访问器。set——给属性赋值get——获取属性值如果只有get访问器,表示属性只读;如果只有set访问器,表示只写属性;两个都有,表示读写属性。3)get访问函数是一个不带参数的方法,它用于向外部返回属性成员的值。通常访问函数的语句或语句块主要由return或throw语句返回某个变量成员的值。26set访问函数Set访问函数是一个带有简单值类型参数的方法,用于处理类外部的写入值。set函数带有一个特殊的关键字value,在set函数中通过value将外部的输入传递进来,然后赋值给类中的某个变量成员。C#封装:封装的概念:可以把程序按某种规则分成很多“块“,块与块之间可能会有联系,每个块都有一个可变部分和一个稳定的部分。我们需要把可变的部分和稳定的部分分离出来,将稳定的部分暴露给其他块,而将可变的部分隐藏起来,以便于随时可以让它修改。这项工作就是封装。例如:在用类实现某个逻辑的时候,类就是以上所说的块,实现功能的具体代码就是可变的部分,而public的方法或者属性则是稳定的部分封装的意义封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的原素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。封装提供了一个有效的途径来保护数据不被意外的破坏。相比我们将数据(用域来实现)在程序中定义为公用的(public)我们将它们定义为私有的(private)在很多方面会更好。C#继承继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类来定义一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。例如:publicclassA{publicA(){}}publicclassB:A{publicB(){}}C#多态同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。C#多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。◆编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。◆运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写虚成员实现。C#多态性之重载和覆写的区别:重载publicintCalculate(intx,inty)publicdoubleCalculate(doublex,doubley)特点(两必须一可以)方法名必须相同参数列表必须不相同返回值类型可以不相同覆写子类中为满足自己的需要来重复定义某个方法的不同实现。通过使用override关键字来实现覆写。只有虚方法和抽象方法才能被覆写。要求(三相同)(1)相同的方法名
本文标题:面向对象相关概述-我学院网唐旭东.
链接地址:https://www.777doc.com/doc-1960776 .html