《类与类成员》PPT课件.ppt
《《类与类成员》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《类与类成员》PPT课件.ppt(126页珍藏版)》请在三一办公上搜索。
1、第4章,类与类成员,4.1 类与对象4.2 字段4.3方法4.4 构造函数与析构函数4.5 属性4.6 索引器4.7 分部类,4.1 类和对象,类是C#应用程序的基本组成单元,是在编写应用程序时对系统中的相关概念进行抽象并进一步封装的产物。4.1.1 类的声明访问修饰符 class 类名/类的成员定义;,说明:访问修饰符可以省略。访问修饰符:用来修饰类和类的成员,它指出了类或类的成员是否能够被其它类的代码合法引用,体现了面向对象中的封装思想。它是定义类的可选部分。C#中有五种访问修饰符,如表4-1所示:,表4-1 访问修饰符,类名:是C#中的一个合法标识符。类名最好能够体现类的含义和用途。其第
2、一个字母一般采用大写。类的成员定义用一对大括号“”括起来,我们通常称之为类的主体。类的主体并不是一定要包括成员的定义,我们甚至可以声明一个类,不包括任何成员。如:class Reader,4.1.2 对象,类是一个抽象的概念。通常情况下,一个类在声明之后并不能直接使用。我们需要创建这个类的对象(通常也称对象为实例,创建对象的过程称为类的实例化),并且声明对这个对象的引用。声明一个对象引用的形式如下:类名 对象名;,一定要注意的是,类是一种引用类型。引用类型变量与值类型变量不同的是:值类型变量中存储的是实际数据,而引用类型变量中存储的是实际数据所在的内存地址。如语句:Reader Tony;内存
3、图4-1所示:,C#中使用关键字new来创建一个对象,其声明格式如下:new 类名();可以通过赋值语句将之前声明的对象引用Tony与创建的这个对象建立关联,通常说是让对象引用Tony指向新的对象:Tony=new Reader();,通过上句代码,对象引用Tony中就存放了新对象的地址,内存图4-2所示:一般情况下,我们同时声明对象引用和创建对象。格式如下:类名 对象名=new 类名();,有了类的对象,就可以访问其内部的成员,C#语言中使用运算符“.”,形式如下:对象名.成员名假设Reader类有两个数据成员:class Readerpublic string readerID;/读者证号
4、public string readerName;/读者姓名则可以通过以下语句对成员进行访问:Reader Tony=new Reader();Tony.readerID=R0001;Tony.readerName=Tony;,类与对象的区别和联系:类是一个相对抽象的概念,而对象是一个相对具体的概念;类为生成一个或多个对象提供模板、蓝图。,4.1.3 类的成员,类的成员包括数据成员和函数成员。其中数据成员用来描述该类或对象的状态,而函数成员用来描述该类或对象所具有的行为。,表4-2 类的成员,字段是类最常见的数据成员。字段用来表示在类中定义的与类或对象相关联的变量成员。根据这些字段是跟实例对象
5、相关还是和类相关,可以分为实例字段和静态字段。另外还有只读字段。实例字段实例字段是与类的实例对象相关的字段,在该类的每个实例中都有它的数据副本。改变其中一个实例的某个字段不会影响到其他实例中的相同字段。,4.2 字段,实例字段的声明格式如下:访问修饰符 数据类型 字段名=初始值;当省略了“访问修饰符”,则类的成员的默认访问权限为private;而省略“=初始值”对字段的值进行初始化时,则字段会根据其数据类型的不同而具有相应的默认值。,【例4-1】声明一个图书类Book,并为其添加实例字段,并进行字段访问。,/4-1.csenum EBookStatus/枚举类型图书状态 AtLibrary,/
6、在馆 Borrowed,/借出 class Book/图书类 public string bookID;/实例字段:图书编号 public string bookName;/实例字段:图书名称 public EBookStatus currentStatus;/实例字段:当前状态 public DateTime borrowDate;/实例字段:借出日期 public DateTime returnDate;/实例字段:应还日期,class _4_1/启动类 static void Main(string args)/创建一个图书对象Book book=new Book();/在类Book的外
7、部,通过对象名访问其实例字段book.bookID=B0001;book.bookName=C语言;book.currentStatus=EBookStatus.AtLibrary;Console.WriteLine(图书编号:t+book.bookID+n图书名称:t+book.bookName+n当前状态:t+book.currentStatus.ToString();,【例4-2】声明一个读者类Reader,并为其添加实例字段。,/4-2.cs/图书类class Book/读者类class Readerpublic string readerID;/实例字段:读者证号public str
8、ing readerName;/实例字段:读者姓名public int readerAge;/实例字段:读者年龄public Book borrowedBook;/实例字段:所借图书,/启动类class _4_2 static void Main(string args)/实例化一个读者对象TonyReader Tony=new Reader();/在类Reader的外部,通过对象名访问其实例字段Tony.readerID=S0001;Tony.readerName=Tony;Tony.readerAge=20;Console.WriteLine(读者证号:t+Tony.readerID+n读
9、者姓名:t+Tony.readerName+n读者年龄:t+Tony.readerAge);,4.2.2 静态字段,与实例字段不同,静态字段表明该字段是属于类本身而不是属于具体某一个实例对象,它被所有的实例共享。类的字段默认情况下都是实例字段,除非在声明字段时使用了static关键字修饰。定义一个静态字段的格式如下:访问修饰符 static 数据类型 字段名=初始值;,在类的外部访问静态字段时,由于静态字段是属于类的数据成员,因此在类的外部直接通过类名来引用,而无需创建类的任何实例:类名.静态字段名而在类的内部,可以使用上面的访问方法,也可以省略类名而直接使用字段名来访问。但无论在任何地方都不
10、能用类的实例对象来访问静态成员。,【例4-3】为读者类Reader声明静态字段读者人数。,/读者类class Readerpublic static int readerCount;/静态字段readerCountclass _4_3/启动类static void Main()Reader Tony=new Reader();Reader Rose=new Reader();/Rose.readerCount=2;/错误的访问方式Reader.readerCount=2;Console.WriteLine(图书馆已注册的读者人数为:+Reader.readerCount.ToString();
11、/用类名Reader直接访问,4.2.3 只读字段,在声明一个字段时若使用关键字readonly,则表明该字段是一个只读字段。只读字段只能在声明或者在构造函数(具体参见4.5节)中进行赋值,而在其他地方无法修改其值。声明格式如下:访问修饰符 readonly 数据类型 字段名=初始值;,4.3 常量,在类中,常量是具有常数值的类的数据成员。在声明常量时就要确定它的值,而之后值不能再被修改。可以用关键字const来声明类的常量数据成员:访问修饰符 const 数据类型 常量名=初始值;说明:1、在上面的声明语句中,“初始值”是必须在编译阶段就能确定的值,这与之前我们看到的字段的定义不同。,2、常
12、量可以是一个简单类型(sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool 或 string 类型、枚举)的常数,或由其它常量组成的表达式。3、如果是某个对象的引用,则初始值只能是null,而不能指向某一个对象,因为对象只有在运行时才能确定。,如以下示例的常量声明:class DateConstancepublic const int hours=24;/整型常数public const int minutes=hours*60;/整型常量表达式public const int seconds=mi
13、nutes*60;/整型常量表达式public const string monday=星期一;/字符串常数/public const Reader r=new Reader();/错误的常量声明,编译时无法确定其值 如果要声明多个相同类型的常量,我们可以在一条语句中同时声明,中间用逗号隔开:class DateConstancepublic const int hours=24,minutes=hours*60,seconds=minutes*60;,由于常量的值在声明之后就不能再改变,因此对于该类的所有实例来说,这个常量的值都是相同的。所以这个常量相当于是类的成员,而不是对象的成员,虽然它
14、在声明时不能使用关键字static,但是访问常量的方式和访问静态字段一样:类名.常量名,只读字段与常量字段的区别:1、常量只能在声明时赋值;而只读字段可以在声明时赋值,同时也可以在构造函数中赋值,但以在构造函数中的赋值为最终的值。2、常量在程序编译时值就必须确定,而只读字段的值可以在程序运行时确定。3、常量虽然不能用static关键字修饰,但它默认是类级别的成员;而只读字段可以是类的成员(用static关键字修饰),也可以是对象的成员,它允许类的每个实例对象都有不同的值。,4.4 方法,方法是类最普通的函数成员。它包含一系列的执行语句,用于实现可以由类或对象执行的计算或操作。一般情况下,方法包
15、括方法声明和方法体。类的其他函数成员本质上也是方法。如之前章节都会涉及到的应用程序的启动方法Main:public static void Main(string args)/方法体,方法声明,在C#中,没有像C和C+语言中的全局函数,每一个方法都必须和类或结构相关。方法在类或结构中声明,需要指定访问修饰符、返回值类型、方法名称和方法参数。其声明的一般格式如下:访问修饰符 返回值类型 方法名称(参数列表)/方法体,说明:1、访问修饰符:五种访问修饰符的一种。该项可以省略,默认访问权限为private(私有的)。2、返回值类型:方法执行相应操作后返回的值的数据类型。方法的执行不一定要有返回值,但
16、没有返回值并不意味着该项可以省略。如果方法没有返回值,则返回值类型必须为void。3、方法名称:对方法名的声明推荐具有一定的含义,例如PrintResult的大意就是打印计算结果,这样其他的开发人员也能够读懂该函数的作用,增加了代码的可读性,4、参数列表:在方法定义时,参数列表中的参数称为形参(形式参数)。参数列表用来向方法传递参数。参数列表可以省略,表示方法没有参数,但是一对小括号不能省略。如果包含多个参数,则参数之间用逗号分隔。参数列表声明格式如下:数据类型 参数1,数据类型 参数2,.,数据类型 参数n5、方法体可以为空,但一对大括号不能缺少。,下面的语句声明了两个方法:public i
17、nt Add(int a,int b)void PrintResult(int a,int b)第一条语句用public关键字声明了一个公有方法Add。返回值类型为int,接受两个int类型参数a和b;第二条语句声明方法PrintResult时省略了访问修饰符,则该方法默认是私有方法。返回值类型为void,表示没有返回值。同样接受两个int类型的参数a和b。两个方法的方法体都为空,当仍要加上一对大括号。,方法体,方法体是用来描述方法所要执行的语句序列,包含在一对大括号“”中。方法体中可以包含变量的定义、控制语句块以及对其他方法的调用。局部变量在方法体中定义的变量,一般称为局部变量。它用于临时保
18、存方法体中的计算数据。其定义格式如下:数据类型 变量名称=初始值;,局部变量和实例字段都用来保存数据,但它们之间存在较多区别:首先,实例字段在定义时,若不使用初始值对其进行初始化,则系统会将默认值赋值给该字段。而对于局部变量,在引用该局部变量之前,必须显式的对其赋值,否则系统会报错:“使用了未赋值的局部变量”。如下代码所示:,class MyClasspublic void Method()int i=1;int j;int k;j=1;Console.WriteLine(i);/正确,已在定义时i赋初值Console.WriteLine(j);/正确,在引用j之前已赋值Console.Wri
19、teLine(k);/错误,k未赋值,其次,局部变量不能用访问修饰符修饰。如下代码所示:class MyClasspublic int i;/正确,实例字段可以用访问修饰符修饰public void Method()public int j=1;/错误,不能用访问修饰符修饰int k=1;/正确,未使用访问修饰符修饰最后,他们的生存周期不同。实例字段的生存周期从实例被创建开始,到实例被销毁时结束。而对于局部变量来说,当局部变量所在的语句块执行到其被定义的语句时开始,到所在的语句块执行完成后结束。,2.return语句如果方法有返回值,则必须在方法体中使用return语句从方法中返回一个值。re
20、turn语句的使用方式如下:return 表达式;说明:1、return语句会将值返回给方法的调用方。另外还会终止当前方法的执行并将控制权返回给调用方,而不管return语句后是否还有其他语句未执行。,例如,下面的两个方法使用 return语句来返回2个整数之和:class MyClass public int Add(int num1,int num2)int Sum=0;Sum=num1+num2;return Sum;/将Sum的值以及控制权返回给调用方 Console.WriteLine(Sum);/此语句不会被执行 当执行完return语句之后,方法就会终止,返回到调用方,而之后的语
21、句都不会被执行。,2、return关键字后面是与返回值类型匹配的表达式(表达式值的类型必须与方法声明的返回值类型相同,或是能隐式转换成为返回值类型)。class MyClass public Double Add(int num1,int num2)int Sum=0;Sum=num1+num2;return Sum;以上方法返回值类型为Double类型,但是return语句后的Sum是int类型。由于int类型能够安全转换为Double类型,且不会丢失信息,因此程序能够正常运行。,3、方法体中可以有多条return语句,但如果方法有返回值,就必须保证有一条return语句必定会执行一次,例如
22、,对于下面的方法,编译器就会报错:class MyClass public int Div(int num1,int num2)if(num2!=0)return num1/num2;/该return语句不一定会执行,在上面的方法中,只有当num2不等于0时,才能够保证return语句的执行。但该方法必须要有一个返回值,因此对于以上方法编译器会报错:“并非所有的代码路径都返回值”。以上方法可以改为:class MyClasspublic int Div(int num1,int num2)if(num2!=0)return num1/num2;else return 0;,4、在没有返回值的方
23、法体中,方法会按照语句的流程执行完成后自动终止,返回给调用方。但也可以使用return 语句来提前停止方法的执行,由于没有返回值,因此省略return关键字后的表达式,直接用分号结束。格式如下:return;,【例4-4】编写一个方法,在控制台输出读者的相关信息。编写方法之前首先要考虑方法应该写在哪个类中,因为读者的信息都在Reader类中声明,因此该方法应写在Reader类中,作为它的一个函数成员。其次考虑方法的声明:访问修饰符:由于该方法要供其他类使用,因此可定义成为public。返回值类型:该方法只是将读者信息在控制台输出即可,不需要返回值,因此该项为void。方法名称:当然,将方法命名
24、为a或xyz都不会出错,但一般要为方法起个有意义的名称便于理解。在此使用Display。参数列表:由于要显示的信息为类的实例字段,在类的内部直接用字段名访问。因此不需要其他参数。,/4-4.cs/图书类class Book/读者类class Readerpublic string readerID;/实例字段:读者证号public string readerName;/实例字段:读者姓名public int readerAge;/实例字段:读者年龄public Book borrowedBook;/实例字段:所借图书/显示读者信息方法public void Display()Console.W
25、riteLine(读者证号:t+readerID+n读者姓名:t+readerName+n读者年龄:t+readerAge);,/启动类class _4_4 static void Main()Reader Tony=new Reader();Tony.readerID=S0001;Tony.readerName=Tony;Tony.readerAge=20;Tony.Display();/方法的调用,在中具体讲解,4.4.3 实例方法与静态方法,声明方法时使用了static修饰符的是静态方法,没有使用static修饰符的方法则是实例方法。之前讲到的方法都是实例方法。同字段类似,实例方法属于实
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 类与类成员 成员 PPT 课件
链接地址:https://www.31ppt.com/p-4877119.html