第7章 面向对象编程技术.docx
- 文档编号:25565461
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:13
- 大小:20.06KB
第7章 面向对象编程技术.docx
《第7章 面向对象编程技术.docx》由会员分享,可在线阅读,更多相关《第7章 面向对象编程技术.docx(13页珍藏版)》请在冰豆网上搜索。
第7章面向对象编程技术
第7章面向对象编程技术
第一讲类和对象、属性、方法
教学目标
1. 理解类和对象的概念。
2. 掌握类和对象的定义和使用。
3.掌握值类型变量和引用类型变量的区别。
4.掌握三种访问修饰符及其含义。
教学过程
预备知识
7.1类和对象
7.1.1类和对象概述
现实生活中的类是人们对客观对象不断认识而产生的抽象的概念,而对象则是现实生活中的一个个实体。
面向对象程序设计的类概念从本质上和人们现实生活中的类概念是相同的。
类是一种数据类型,在C#中,类分为两种:
由系统提供的预先定义的,这些类在.NET框架类库中;用户定义数据类型。
在创建对象之前必须先定义该对象所属的类。
然后由类声明对象。
在VisualStudio.NET集成环境中的,工具箱中的一个个控件,是被图形文字化的可视的类,而把这些控件添加到窗体设计器中后,窗体设计器中的控件则是对象,即由工具箱中的类创建的对象。
7.1.2类定义
在类定义中需要使用关键字class,其简单的定义格式为:
class类名{类体}
“类名”是一个合法的C#标识符,表示数据类型(类类型)名称,“类体”以一对大括号开始和结束。
在一对大括号后面可以跟一个分号,也可以省略分号。
例如:
classStudent//类名为Student
{
publicstringID;
publicstringName;
publicstringSex;
}
定义了一个名为“Student”(学生)的类,类体中包括学生的学号(“ID”)、姓名(“Name”)与性别(“Sex”)。
“类体”包括类中的所有数据及对数据的操作,面向对象程序设计将数据与对数据的操作作为一个整体,以类的形式进行定义,这种机制叫“封装”。
在“类体”中,所有的数据及对数据的操作的集合叫类成员,类成员的种类很多,本章仅介绍“字段”、“属性”、“方法”与“构造函数”。
“字段”是类定义中的数据,也叫类的变量。
在上例中定义的“ID”、“Name”与“Sex”等均为类中的字段。
如果需要在类定义的多个方法中使用某个变量,该变量应该声明为字段。
“属性”用于读取和写入“字段”值,“属性”是字段的自然扩展,对用户而言,“属性”等同于“字段”本身,对程序员而言,属性是一种读写“字段”的特殊方法。
“方法”实质上就是函数,通常用于对字段进行计算和操作,即对类中的数据进行操作,以实现特定的功能。
7.1.3声明与使用对象
1.声明对象
声明对象的格式与声明基本数据类型的格式相同,其语法格式为:
类名对象名;
例如:
Students1;//声明一个学生类对象s1
对象声明后,需用“new”关键字将对象实例化,。
实例化的语法格式:
对象名=new类名();
例如:
s1=newStudent();//为s1分配内存
Students1=newStudent();\\声明的同时实例化
2.访问对象
访问对象实质是访问对象成员,对对象变量成员的访问使用“.”运算符。
例如:
s1.ID="2005001";
s1.Name="张三";
s1.Sex="女";
使用对象变量为另一对象变量整体赋值,例如,“Students2;s2=s1;”或“Students2=s1;”。
可以使用对象中的某一成员为变量赋值。
例如:
stringsName=s1.Name;
7.1.4值类型与引用类型
1.值类型
值类型变量直接包含其本身的数据,因此每个值类型变量本身就包含有赋给它的值。
在C#中,内置数据类型除了字符串(string)类型与对象(object)类型外其余均为值类型。
枚举类型与结构类型也是值类型。
例如“intx=42;”,整型变量x就是值类型。
2.引用类型
与值类型不同,引用类型变量本身不包含数据,只是存储对数据的引用,数据保存在内存的其他位置。
7.1.5访问控制
C#中最常用的访问修饰符及其意义:
public(公有):
访问不受限制,可以被任何其他类访问
private(私有):
访问只限于含该成员的类,即只有该类的其他成员能访问
protected(保护):
访问只限于含该成员的类、及该类的派生类
如果声明成员没有使用任何访问修饰符,则该成员被认为是私有的(private)。
如果成员被声明为private或protected,则不允许在类定义外使用点运算符访问。
7.2属性
7.2.1声明属性
在类定义中声明属性的语法格式为:
访问修饰符类型属性名
{
get{}
set{}
}
classStudent//类名为Student
{
privatestringname;//声明字段
publicstringName//对应name的属性
{
get
{returnname;}
set
{name=value;}
}
}
2.声明只读或只写属性
在属性声明中,如果只有get访问器,则该属性为只读属性。
例如:
publicstringSex
{
get
{
returnsex;
}
}
7.2.2使用属性
属性成员的使用就如同公有数据成员的使用一样。
可以为可写的属性赋值,可以用可读的属性为其他变量赋值。
例:
Students1=newStudent();
//用属性设置修改数据成员值
s1.ID="2005003";
s1.Name="李四";
s1.Sex="男";
//用属性读取数据成员值为其他变量赋值
stingssex=s1.Sex;
7.3方法
方法是把一些相关的语句组织在一起,用于解决某一特定问题的语句块。
方法必须放在类定义中。
方法同样遵循先声明后使用的规则。
C#语言中的方法相当于其他编程语言(如VB.NET)中的通用过程(Sub过程)或函数过程(Function过程)。
C#中的方法必须放在类定义中声明,也就是说,方法必须是某一个类的方法。
7.3.1声明与调用方法
方法的使用分声明与调用两个环节。
1.声明方法
声明方法最常用的语法格式为:
访问修饰符返回类型方法名(参数列表){}
方法的访问修饰符通常是public,以保证在类定义外部能够调用该方法。
方法的返回类型用于指定由该方法计算和返回的值的类型,可以是任何值类型或引用类型数据,如,int、string及前面定义的Student类。
如果方法不返回一个值,则它的返回类型为void。
方法名是一个合法的C#标识符。
参数列表在一对圆括号中,指定调用该方法时需要使用的参数个数、各个参数的类型,参数之间以逗号分隔。
实现特定功能的语句块放在一对大括号中,叫方法体,“{”表示方法体的开始,“}”表示方法体的结束。
如果方法有返回值,则方法体中必须包含一个return语句,以指定返回值,其类型必须和方法的返回类型相同。
如果方法无返回值,在方法体中可以不包含return语句,或包含一个不指定任何值的return语句。
2.调用方法
从方法被调用的位置,可以分为在方法声明的类定义中调用该方法和在方法声明的类定义外部调用方法。
在方法声明的类定义中调用该方法的语法格式为:
方法名(参数列表)
在方法声明的类定义中调用该方法,实际上是由类定义内部的其他方法成员调用该方法。
在方法声明的类定义外部调用该方法实际上是通过类声明的对象调用该方法,其格式为:
对象名.方法名(参数列表)
7.3.2参数传递
在方法的声明与调用中,经常涉及方法参数,在方法声明中使用的参数叫形式参数(形参),在调用方法中使用的参数叫实际参数(实参)。
在调用方法时,参数传递就是将实参传递给形参的过程。
例如,某类定义中声明方法时的形参如下:
publicintIntMax(inta,intb){}
则声明对象classmax后调用方法时的实参如下:
classmax.IntMax(x,y)
1.按值传递
参数按值的方式传递是指当把实参传递给形参时,是把实参的值复制(拷贝)给形参,实参和形参使用的是两个不同内存中的值,所以这种参数传递方式的特点是形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。
2.按引用传递
按引用传递是指实参传递给形参时,不是将实参的值复制给形参,而是将实参的引用传递给形参,实参与形参使用的是一个内存中的值。
这种参数传递方式的特点是形参的值发生改变时,同时也改变实参的值。
基本类型参数按引用传递时,实参与形参前均须使用关键字ref。
例如Swap方法代码如下:
publicvoidSwap(refstrings1,refstrings2)
{strings3=s1;s1=s2;s2=s3;}
则调用该方法的语句代码如下:
Swap(refss1,refss2);//在实参中增加ref关键字
类对象参数总是按引用传递的,所以类对象参数传递不需要使用ref关键字。
7.3.3重载方法
方法重载是声明两个以上的同名方法,实现对不同数据类型的相同处理。
方法重载有两点要求:
①重载的方法名称必须相同;
②重载的方法,其形参个数或类型必须不同,否则将出现“已经定义了一个具有相同类型参数的方法成员”的编译错误。
例如能同时处理整型与浮点型数据的重载方法:
publicvoidSwap(refinta,refintb){}
publicvoidSwap(reffloata,reffloatb){}
&巩固拓展
练习题:
课后练习第132页1、2、3、4题
课程小结
本次课主要介绍了类、对象、属性和方法的声明及使用,通过学习能够基本掌握面向对象程序设计方法。
第二讲构造函数、静态成员
教学目标
1. 掌握构造函数的作用及声明。
2. 掌握重载构造函数的方法。
3.掌握静态数据成员和静态方法的声明的使用。
教学过程
预备知识
7.4构造函数
构造函数是一种特殊的方法成员,构造函数的主要作用是在创建对象(声明对象)时初始化对象。
一个类定义必须且至少有一个构造函数,如果定义类时,没有声明构造函数,系统会提供一个默认的构造函数,如果声明了构造函数,系统将不再提供默认构造函数。
7.4.1声明构造函数
声明构造函数与声明普通方法相比,有两个特别要求,一是构造函数不允许有返回类型包括void类型,二是构造函数的名称必须与类名相同。
所以构造函数往往需要使用形参,例如创建一个学生类对象时,需要给出学生的学号、姓名、性别及年龄等,所以学生类构造函数可以声明如下:
publicStudent(stringID,stringnname,stringssex,intaage)
{id=ID;name=nname;sex=ssex;age=aage;}
由于声明了上述带参数的构造函数,所以系统不再提供默认构造函数,这样在创建对象时,必须按照声明的构造函数的参数要求给出实际参数,否则将产生编译错误,例如:
Students1=newStudent(“2005001”,“张三”,“女”,21);
由上述创建对象的语句可知,new关键字后面实际是对构造函数的调用。
7.4.2重载构造函数
例如为学生类重载一个只初始化姓名的构造函数,代码如下:
publicStudent(stringnname)
{name=nname;}
如果在声明了带参数的构造函数后,还想保留默认构造函数,则必须显式声明一个默认构造函数。
以Student类为例,声明默认构造函数如下:
publicStudent(){}//显式声明默认构造函数
7.5静态成员
类可以具有静态成员,例如静态字段、静态方法等。
静态成员与非静态成员的不同在于,静态成员属于类,而非静态成员则总是与特定的实例(对象)相联系。
声明静态成员需要使用static修饰符。
7.5.1静态数据成员
静态数据成员不属于任何一个特定的对象,而是属于类,或者说属于全体对象,是被全体对象共享的数据。
7.5.2静态方法
静态方法同样使用修饰符static声明,静态方法属于类,只能使用类调用,不能使用对象调用。
静态方法与非静态方法一样可以重载。
7.5.3C#中的常用类型转换静态方法
在C#的System命名空间中,有一个Convert(转换)类,该类提供了由字符串类型转换为相应其他基本数据类型的一系列静态方法。
类型转换方法最常用的调用格式之一是:
Convert.静态方法名(字符串类型数据)
1.Convert.ToInt32方法
2.Convert.ToSingle方法
3.Convert.ToChar方法
4.Convert.ToBoolean方法
操作任务任务认识计算机
一、任务要求
在控制台应用程序中创建Student类,并声明构造函数及构造函数的重载。
要求类定义中包含学号、姓名、年龄、性别字段。
输出性别时,根据对应的布尔值输出“男”或“女”。
二、操作步骤
创建student类的代码为:
classstudent
{
publicstringid;
publicstringname;
publicboolsex;
publicintage;
publicstudent(){}
publicstudent(stringid,stringname,boolsex,intage)
{
this.id=id;
this.name=name;
this.sex=sex;
this.age=age;}
publicstudent(stringname)
{this.name=name;}
}
Main中的代码为:
charssex;
students1=newstudent();
if(s1.sex==true)
ssex='男';
else
ssex='女';
Console.WriteLine("学号:
"+s1.id+",姓名:
"+s1.name+",性别:
"+
ssex+",年龄:
"+s1.age);
students2=newstudent("12345","张三",true,21);
if(s2.sex==true)
ssex='男';
else
ssex='女';
Console.WriteLine("学号:
"+s2.id+",姓名:
"+s2.name+",性别:
"+
ssex+",年龄:
"+s2.age);
students3=newstudent("李萍");
if(s3.sex==true)
ssex='男';
else
ssex='女';
Console.WriteLine("学号:
"+s3.id+",姓名:
"+s3.name+",性别:
"+
ssex+",年龄:
"+s3.age);
Console.ReadLine();
经验与技巧
注意:
当调用系统默认的构造函数时,输出年龄为女是因为字段sex为bool型,初始化为默认值后事false,而经过判断当sex为false时输出女。
&巩固拓展
练习题:
课后练习第133页9题
课程小结
本次课主要介绍了构造函数和静态成员的声明和使用,通过学习能够掌握面向对象程序设计方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 面向对象编程技术 面向 对象 编程 技术