《第章面向对象编程技术 .docx》由会员分享,可在线阅读,更多相关《第章面向对象编程技术 .docx(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品名师归纳总结第4章 面对对象编程技术面对对象的程序设计方法是当前程序设计的大势所趋。面对对象的程序设计方法是对结构化程序设计方法的重新熟悉。在程序的设计中,方法总是与特定的数据结构亲密相关的, 方法含有对数据结构的拜访,特定的方法只适用于特定的数据结构,因此方法与数据结构在编程中应当是一个密不行分的整体,这个整体叫对象。C#通过类、对象、继承、多态等机制形成一个完善的面对对象的编程体系。4.1 类和对象类是 C#程序设计的基本单位。4.1.1 类和对象概述现实生活中的类是人们对客观对象不断熟悉而产生的抽象的概念,而对象就是现实生活中的一个个实体。例如,人们在现实生活中接触了大量的汽车、摩托
2、车、自行车等实体,从而产生了交通工具的概念,交通工具就是一个类,而现实生活中的详细的汽车、摩托车自行车等就是该类的对象。面对对象程序设计的类从本质上和人们现实生活中的这一熟悉过程是相同的。例如在编程实践中,人们常常使用按钮这一控件,每一个详细的按钮是一个按钮对象,而按钮类就是按钮对象的抽象,并且人们把这一抽象用运算机编程语言表示为数据集合与方法集合的统一体,然后再用这个类创建一个个详细的按钮对象。可以把类比作一种蓝图,而对象就是依据蓝图所创建的实例,可以把类比作生产模具, 而对象就是由这种模具产生的实例(产品)。所以人们又把对象叫做类的实例。类是对事物的定义,而对象就是该事物本身。在 Visu
3、al Studio.NET集成环境中的,工具箱中的一个个控件,是被图形文字化的可视的类,而把这些控件添加到窗体设计器中后,窗体设计器中的控件就是对象,即由工具箱中的 类创建的对象。类是一种数据类型,在C# 中,类这种数据类型可以分为两种:一种是由系统供应的预先定义的,这些类在 .NET框架类库中。一种是用户定义数据类型。在创建对象之前必需先定义该对象所属的类。然后由类声明对象。类本质上是一种数据类型,所以类的用法与基本数据类型的用法基本相同,事实上,在 Visual Studio.NET中像 int 、 float 等基本数据类型也是特殊的类。那么,用基本数据类型可以声明变量,用类类型也可以声
4、明变量,只不过类类型的变量叫类的对象或类的实例。可编辑资料 - - - 欢迎下载精品名师归纳总结4.1.2 类定义类定义的格式与结构定义的格式相像,在类定义中需要使用关键字class,其简洁的定义格式为:class类名 类体 “类名”是一个合法的C#标识符,表示数据类型(类类型)名称,“类体”以一对大括号开头和终止,在一对大括号后面可以跟一个分号。例如:class student/ 类名为 studentpublic string ID 。public string Name 。public bool Sex 。上 例 中 , 定 义 了 一 个 名 为 “ student ” ( 学 生 )
5、 的 类 , 类 体 中 包 括 学 生 的 学 号(“ ID ”)、姓名(“ Name ”)与性别(“Sex”)。在上例的“类体”中声明的数据都使用“public ”修饰,“ public ”(公共的)表示这些数据可以直接进行拜访。假如仅从“ student”类的定义形式看,其与结构类型除了关键字外几乎没有任何差别。当然这只是为了说明问题便利,这种定义方式并不符合面对对象程序设计的原就,由于类中缺 少了对数据的操作。 “类体”包括类中的全部数据及对数据的操作,面对对象程序设计将数据与对数据的操作作 为一个整体,以类的形式进行定义,这种机制叫“封装”。在“类体”中,全部的数据及对数据的操作的集
6、合叫类成员,类成员的种类许多,本章仅介绍“字段”、“属性”、“方法”与“构造函数”。“字段”是类定义中的数据,也叫类的变量。在上例中定义的“ID ”、“ Name”与“ Sex” 等均为类中的字段。 “属性”用于读取和写入“字段”值,“属性”是字段的自然扩展,对用户而言,“属性”等同于“字段”本身,对程序员而言,属性是一种读写“字段”的特殊方法。 “方法”实质上就是函数,用于对字段进行运算和操作,即对类中的数据进行操作,以实现特定的功能。4.1.3 声明与使用对象定义类之后,可以用定义的类声明对象,声明对象后可以拜访对象成员。每一个类对象均具有该类定义中的全部成员,正如每一个整型变量均可以表示
7、同样的数值范畴一样。1. 声明对象声明对象的格式与声明基本数据类型的格式相同: 类名 对象名。例如:可编辑资料 - - - 欢迎下载精品名师归纳总结student S1 。 / 声明一个同学类对象S1但是,对象声明后,需用“new ”关键字进行初始化,这样才能为对象在内存中安排储存数据的空间。初始化的格式:对象名 =new 类名 。例如:S1=new student 。/ 为 S1 安排内存空间可以将声明与初始化对象合二为一,例如:student S1=new student 。/ 声明对象并初始化2. 拜访对象拜访对象实质是拜访对象成员,对对象变量成员的拜访与结构变量相同,使用“.”运算符。
8、例如:S1.ID=12345 。S1.Name= 张三 。S1.Sex=true。上面的代码为对象S1 数据成员赋值。可以使用对象变量为另一对象变量整体赋值,例如,“student S2。S2=S1。”或“ student S2=S1。”。这时,不需要使用new 关键字对“ S2”初始化。可以使用对象中的某一成员。例如:string sName=S1.Name 。 / 将对象 S1 的 Name 成员值赋给字符串变量sName4.1.4 值类型与引用类型类定义的类型与结构定义的类型虽然相像,但这两种类型却有很大的差别,这涉及到C#中变量储备方式的问题。从变量的储备方式看,C#中的变量可以分为值
9、类型变量与引用类型变量。1. 值类型值类型变量直接包含其本身的数据,因此每个值类型变量本身就包含有赋给它的值。在 C#中,内置数据类型除了字符串(string )类型与对象( object)类型外其余均为值类型。枚举类型与结构类型也是值类型。例如“int X =42 。”,整型变量X 就是值类型。2. 引用类型与值类型不同,引用类型变量不包含本身的数据,只是储备对数据的引用,数据储存在内存的其他位置。例如:using System 。class Class1class Testpublic int A 。static void Mainstring args可编辑资料 - - - 欢迎下载精品
10、名师归纳总结int X=42,Y=X 。 Test T1=new Test 。T1.A=42 。Test T2=T1 。Y=100 。T2.A=100 。引用类型与值类型在内存中的储备形式如图4-1 所示。int X=42 。42 T1.A=42 。42 的引用42图4-1 值类型与引用类型的储备值类型变量可以使用变量来赋值,引用类型变量也可以使用变量来赋值。例如上例中的代码:int X=42,Y=X。 Test T1=new Test 。T1.A=42 。Test T2=T1 。/ 使用对象变量赋值但是,值类型与引用类型用变量赋值的性质却不同,如图4-2 所示。int X=42 。int Y
11、=X 。4242T1.A=42 。42 的引用42Test T2=T1 。42 的引用图4-2 值类型与引用类型用变量赋值从图中可以看到,用变量“X ”为变量“ Y ”赋值,是将“ X ”所在内存中的值复制给了“ Y ”。而用变量“ T1 ”为“ T2 ”赋值,就是将“T1 ”对数据的引用复制给了“T2 ”,即两个对象变量使用的是同一内存中的数据,也就是说,用“T1 ”为“ T2 ”赋值不需要使用new 关键字对对象初始化,也就没有为对象“T2 ”安排储备数据的内存空间。这样,在改变变量值时,将发生本质差别。例如上例中的代码:Y=100 。/Y 的值为 100, X 的值仍是 42T2.A=1
12、00 。/ 不仅 T2 的值为 100 ,T1 的值也为 1004.1.5 拜访掌握在上面类定义的例子中,声明类的数据成员(字段)时,均使用public进行修饰, public叫拜访修饰符。声明类中的成员时,使用不同的拜访修饰符,表示对类成员的拜访权限不同,或者说拜访修饰符确定了在什么范畴可以拜访类成员。可编辑资料 - - - 欢迎下载精品名师归纳总结C#中最常用的拜访修饰符及其意义,如表4-1 所示。拜访修饰符public (公有)private (私有) protected (爱护)意义拜访不受限制,可以被任何其他类拜访拜访只限于含该成员的类,即只有该类的其他成员能拜访拜访只限于含该成员的
13、类、及该类的派生类表 4-1 拜访修饰符在类定义中,假如声明成员没有使用任何拜访修饰符,就该成员被认为是私有(private ) 的。假如不涉及继承, private 与 protected 没有什么区分。在类定义中,假如成员被声明为private 或 protected ,就不答应在类定义外使用点运算符拜访,即在类定义外,点运算符只能拜访public 成员。例如在下面的类定义中:class student/ 类名为 studentprivate string ID 。/ 私有public string Name 。/ 公有protected bool Sex 。 / 爱护student S1
14、=new student 。S1.ID=12345 。/ 非法, ID 为 private S1.Name= 张三 。 / 合法, Name 为 public S1.Sex=true。/ 非法, Sex 为 protected在类定义外使用点运算符拜访“ID ”与“ Sex”是非法的,而拜访“Name ”就是合法的,由于“ ID ”与“ Sex”是 private 或 protected 的,而“ Name ”就是 public 的。通常,在类定义中,数据成员(字段)被声明为private 或 protected ,从而实现所谓的数据隐匿,以确保不能在类外随便拜访类的数据成员。而其他种类的成员
15、就被声明为public , 以通过这些成员实现对类的数据成员的拜访。4.2 属性对私有或爱护数据成员常见的拜访是读取与设置修改数据值,在类定义外部,这种拜访可通过属性成员实现。通过属性可以掌握对数据的拜访方式,甚至设置数据可接受的值域。4.2.1 声明属性在类定义中声明属性的格式为: 拜访修饰符 类型 属性名 可以将属性声明为读写属性、只读属性或只写属性。1. 声明读写属性修改 student 类定义添加属性声明:class student/ 类名为 student/声明字段可编辑资料 - - - 欢迎下载精品名师归纳总结private string id 。private string na
16、me 。private bool sex 。/声明属性public string ID可编辑资料 - - - 欢迎下载精品名师归纳总结getsetreturn id 。id=value 。可编辑资料 - - - 欢迎下载精品名师归纳总结public string Name可编辑资料 - - - 欢迎下载精品名师归纳总结getsetreturn name 。name=value 。可编辑资料 - - - 欢迎下载精品名师归纳总结public bool Sex可编辑资料 - - - 欢迎下载精品名师归纳总结getsetreturn sex。sex=value 。可编辑资料 - - - 欢迎下载精品
17、名师归纳总结在属性声明中,get 与 set 叫属性拜访器。 get 完成对数据值的读取,return 用于返回读取的值。 set 完成对数据值的设置修改,value 是一个关键字,表示要写入数据成员的值。属性名应和其要拜访的数据成员名相关但不相同,可以实行数据成员名全用小写,而属 性名的单词首字母大写的方式,如数据成员名为name,就对应的属性名为Name 。可编辑资料 - - - 欢迎下载精品名师归纳总结2. 声明只读或只写属性在属性声明中,假如只有get 拜访器,就该属性为只读属性。例如:public bool Sex可编辑资料 - - - 欢迎下载精品名师归纳总结getreturn s
18、ex。可编辑资料 - - - 欢迎下载精品名师归纳总结只读属性意味着,数据成员的值是不能被修改的。在属性声明中假如只有set 拜访器,就该属性为只写属性。只写属性在程序设计中不常使用。4.2.1 使用属性属性成员的使用就犹如公有数据成员的使用一样。可以为可写的属性赋值,可以用可读的属性为其他变量赋值。以 student 类为例:student S1=new student 。/ 用属性设置修改数据成员值S1.ID=12345 。S1.Name= 张三 。S1.Sex=true。/ 用属性读取数据成员值为其他变量赋值bool SSex=S1.Sex。假如属性为只读的,就属性不能显现在赋值运算符的
19、左边。在 C#程序设计中,窗体与控件的属性就是这类成员,其中在属性窗口显示的属性,均为可读写属性,窗体与控件的只读属性只能在代码中使用。4.3 方法方法是把一些相关的语句组织在一起,用于解决某一特定问题的语句块。方法必需放在类定义中。方法同样遵循先声明后使用的规章。4.3.1 声明与调用方法方法的使用分声明与调用两个环节。1. 声明方法声明方法最常用的格式:拜访修饰符返回类型 方法名 参数列表 方法的拜访修饰符通常是public ,以保证在类定义外部能够调用该方法。方法的返回类型用于指定由该方法运算和返回的值的类型,可以是任何值类型或引用类型数可编辑资料 - - - 欢迎下载精品名师归纳总结据
20、,如, int 、string 及前面定义的student 类。假如方法不返回一个值,就它的返回类型为void 。方法名是一个合法的C#标识符。参数列表在一对圆括号中,指定调用该方法时需要使用的参数个数、各个参数的类型, 参数之间以逗号分隔。参数可以是任何类型的变量。假如方法在调用时不需要参数,就不用指定参数,但圆括号不能省。实现特定功能的语句块放在一对大括号中,叫方法体,“ ”表示方法体的开头,“ ” 表示方法体的终止。假如方法有返回值,就方法体中必需包含一个return 语句,以指定返回值,该值可以是变量、常量、表达式,其类型必需和方法的返回类型相同。假如方法无返回值,在方法体中可以不包含
21、 return 语句,或包含一个不指定任何值的return 语句。例如下面的方法声明:public int IntMaxint a,int b可编辑资料 - - - 欢迎下载精品名师归纳总结int c 。ifabelsec=a。c=b。可编辑资料 - - - 欢迎下载精品名师归纳总结return c 。该方法的功能是求两个整数中较大的整数,并将该整数返回。该方法的返回类型是一个整型值,方法名称为“IntMax ”,参数列表中有两个整型变量参数“a”与“ b”,方法体中有一个 return 语句,该语句指定的返回值是一个整型变量c。该方法体中的语句块也可以用 条件表达式合并为一句:“return
22、 ab.a:b 。”。这时, return 指定的返回值是一个条件表达式, return 语句把该表达式运算的结果返回。2. 调用方法从方法被调用的位置,可以分为在方法声明的类定义中调用该方法和在方法声明的类定义外部调用方法。在方法声明的类定义中调用该方法的格式为: 方法名 参数列表 在方法声明的类定义中调用该方法,实际上是由类定义内部的其他方法成员调用该方法。例如在类定义内部调用求较大整数函数:class CLASSMAXpublic int GetMaxint a,int b/其他方法成员return IntMaxa,b 。/ 在类定义 CLASSMAX内部调用方法IntMax可编辑资料
23、- - - 欢迎下载精品名师归纳总结public int IntMaxint a,int b/求较大整数函数return ab.a:b。在方法声明的类定义外部调用该方法实际上是通过类声明的对象调用该方法,其格式为:对象名 .方法名 参数列表 【例 4-1】创建一个掌握台应用程序,并创建一个类,该类仅包含求两个数中较大数的方法成员,在 Main 方法中调用该方法。using System 。class Class1class CLASSMAX/定义一个类public int IntMaxint a, int breturn ab.a:b 。static void Mainstring argsi
24、nt X=42,Y 。Y=100 。CLASSMAX classmax=new CLASSMAX。 / 声明一个对象int C=classmax.IntMaxX,Y。 / 调用对象方法Console.Write 较大的值为: 。Console.WriteLineC 。Console.ReadLine 。程序运行的结果为:较大的值为: 1004.3.2 参数传递在方法的声明与调用中,常常涉及方法参数,在方法声明中使用的参数叫形式参数(形参),在调用方法中使用的参数叫实际参数(实参)。在调用方法时,参数传递就是将实参传递给形参的过程。以【例 4-1】为例,声明方法时的形参如下:可编辑资料 - -
25、- 欢迎下载精品名师归纳总结public int IntMaxinta ,int b调用方法时的实参如下:classmax.IntMax X ,Y 这样就完成了形参加实参的结合,其传递关系如图4-3 所示。方法调用: classmax.IntMaxX, Y方法声明: public int IntMaxinta,intb图4-3 形参加实参方法参数传递按性质可分为按值传递与按引用传递。1. 按值传递参数按值的方式传递是指当把实参传递给形参时,是把实参的值复制(拷贝)给形参, 实参和形参使用的是两个不同内存中的值,所以这种参数传递方式的特点是形参的值发生转变时,不会影响实参的值,从而保证了实参数据
26、的安全。按值传递如图 4-4 所示。实参形参传递图4-4 按值传递示意基本类型的参数在传递时默认为按值传递。2. 按引用传递方法只能返回一个值,但实际应用中常常需要方法能够修改或返回多个值,这时只靠return 语句明显是无能为力的。假如需要方法返回多个值,使用按引用传递参数的方式可以实现这种成效。按引用传递是指实参传递给形参时,不是将实参的值复制给形参,而是将实参的引用传递给形参,实参加形使用的是一个内存中的值。这种参数传递方式的特点是形参的值发生转变时,同时也转变实参的值。按引用传递分基本数据类型与类对象数据类型两种情形,其传递如图4-5 与图 4-6 所示。实参传 实参传递递形参形参图4
27、-5 基本类型按引用传递示意图4-6 类对象按引用传递示意基本类型参数按引用传递时,形参实际上是实参的别名。基本类型参数按引用传递时, 实参加形参前均须使用关键字ref 。【例 4-2】编写一个掌握台应用程序,在程序中添加一个交换两个整型变量值的方法。调用该方法将两个整型变量的值进行交换并输出交换前后的结果。using System 。可编辑资料 - - - 欢迎下载精品名师归纳总结namespace 数值交换class Class1public void Swapref int a,ref int b/形参 a、b 为引用类型/ 数值交换int c=a 。a=b。b=c 。static vo
28、id Mainstring argsint A=60,B=80 。Console.WriteLine交换前 A 、B 的值: 0 , 1,A,B。Class1 c=new Class1 。c.Swapref A,ref B。 / 以引用方式传递实参A、B Console.WriteLine交换后 A 、B 的值: 0 , 1,A,B。Console.ReadLine 。程序运行结果:交换前 A、B 的值: 60, 80交换后 A、B 的值: 80, 60由于在 Swap 方法中,对引用形参a、b 的值的修改,就是对实参A 、B 的值的修改,所以方法 Swap 胜利的完成了对A 、B 数据的交换
29、功能,相当于返回了两个值,这在按值传递的方式下是无法实现的。类对象参数总是按引用传递的,所以类对象参数传递不需要使用ref 关键字。类对象参数的传递,实际上是将实参对数据的引用复制给了形参,所以形参加实参共同指向同一个内存区域。【例 4-3】编写一个掌握台应用程序,该程序工程名称为“类对象参数”,程序中有两个类定义,一个是创建程序时系统自动创建的类class1,一个是用户自定义的student 类。在class1 类中声明一个方法,该方法以student 类对象为参数。在class1 类中的 Main 方法中调用该方法。using System 。namespace 类对象参数class st
30、udent/ 类名为 student/声明字段 private string id 。可编辑资料 - - - 欢迎下载精品名师归纳总结private string name 。private bool sex 。/声明属性public string ID可编辑资料 - - - 欢迎下载精品名师归纳总结getsetreturn id 。id=value 。可编辑资料 - - - 欢迎下载精品名师归纳总结public string Name可编辑资料 - - - 欢迎下载精品名师归纳总结getsetreturn name 。name=value 。可编辑资料 - - - 欢迎下载精品名师归纳总结p
31、ublic bool Sex可编辑资料 - - - 欢迎下载精品名师归纳总结getsetreturn sex。sex=value。可编辑资料 - - - 欢迎下载精品名师归纳总结class Class1public void StudentF1student ST1/以对象 ST1 为形参/ 修改形参数据成员的值ST1.ID=56789 。ST1.Name= 张三 。可编辑资料 - - - 欢迎下载精品名师归纳总结ST1.Sex=true 。static void Mainstring argsstring SSex 。student S1 。 / 声明一个同学类对象S1 S1=new stu
32、dent 。/ 为 S1 安排内存空间S1.ID=12345 。S1.Name= 李平 。S1.Sex=false 。if S1.Sex=trueSSex= 男。可编辑资料 - - - 欢迎下载精品名师归纳总结elseSSex= 女。可编辑资料 - - - 欢迎下载精品名师归纳总结Console.WriteLine同学学号 :+S1.ID+姓名 :+S1.Name+ 性别 :+SSex 。 / 输出对象 S1 的值Class1 c=new Class1 。/ 声明对象 c 以调用方法 StudentF1 c.StudentF1S1 。/ 以对象 S1 为实参调用方法if S1.Sex=true
33、SSex= 男。可编辑资料 - - - 欢迎下载精品名师归纳总结elseSSex= 女。可编辑资料 - - - 欢迎下载精品名师归纳总结Console.WriteLine同学学号 :+S1.ID+姓名 :+S1.Name+ 性别 :+SSex 。 / 输出对象 S1 的值Console.ReadLine 。程序运行结果:同学学号: 12345 姓名:李平性别:女同学学号: 56789 姓名:张三性别:男结果的第一行为调用方法前对象 S1 的值,结果的其次行为调用方法后对象 S1 的值。虽然在 Main 方法中并未对对象 S1 进行修改,但由于调用方法 StudentF1 时,将 S1 传递给了
34、ST1 ,而类对象参数是按引用传递的,所以在方法 StudentF1 中对 ST1 的修改,就是对 S1 的修改,因此,结果的其次行, S1 的值发生了变化。4.3.3 重载方法有时候方法实现的功能需要针对多种类型的数据,虽然C#有隐式转换功能,但这种转换在有些情形下会导致运算结果的错误,而有时数据类型无法实现隐式转换甚至根本无法转换。例如:using System 。class Class1可编辑资料 - - - 欢迎下载精品名师归纳总结public void Swapref int a,ref int bint c=a。a=b。b=c。static void Mainstring args
35、int A=60,B=80 。Console.WriteLine 交换前 A 、B 的值: 0 , 1,A,B。Class1 c=new Class1 。c.Swapref A,ref B 。 / 调用交换值方法Console.WriteLine 交换后 A 、B 的值: 0 , 1,A,B。Console.ReadLine 。上例中的交换方法只能实现两个整型变量的值交换,无法通过隐式或显式转换来实现其他类型变量的值交换。例如在上例的主方法中添加如下代码:float fA=5.2f,fB=6.0f。c.Swapref fA,ref fB。运行程序时,将显现“无法从ref float 转换为 r
36、ef int ”的编译错误。为了能使同一功能适用于各种类型的数据,C#供应了方法重载机制。方法重载是声明两个以上的同名方法,实现对不同数据类型的相同处理。方法重载有两点要求:(1) 重载的方法名称必需相同。(2) 重载的方法,其形参个数或类型必需不同,否就将显现“已经定义了一个具有相同类型参数的方法成员”的编译错误。假如要使上例中的交换方法能同时处理整型与浮点型数据,重载的方法声明如下:public void Swapref int a,ref int b public void Swapref float a,ref float b声明白重载方法后,当调用具有重载的方法时,系统会依据参数的类
37、型或个数寻求最匹配的方法予以调用。依据前述的例子,当执行“c.Swapref A,refB 。”调用时,系统会调用“ publicvoid Swaprefint a,ref int b ”方法,当执行“c.Swapref fA,reffB 。”调用时,系统会调用“ publicvoidSwapreffloat a,ref floatb ”方法,从而实现对不同的数据类型进行相同处理。【例 4-4 】创建一个掌握台应用程序,在该程序中实现对两个整型、浮点型、双精度型、十进制型与字符型数据比较大小的功能。using System 。namespace 方法重载 _比较值的大小可编辑资料 - - -
38、欢迎下载精品名师归纳总结class Class1/比较值大小的方法声明public int Maxint a, int breturn ab.a:b 。public float Maxfloat a, float breturn ab.a:b 。public double Maxdouble a, double breturn ab.a:b 。public decimal Maxdecimal a, decimal breturn ab.a:b 。public char Maxchar a, char breturn ab.a:b 。static void Mainstring argsint
39、 iA=60,iB=80。float fA=5.2f,fB=8.8f。 double dA=6.2,dB=7.2 。decimal mA=8.2m,mB=9.8m。char cA=a,cB=b 。Class1 c=new Class1 。Console.WriteLineiA与iB较大的值为:0,c.MaxiA,iB。Console.WriteLinefA与fB较大的值为:0,c.MaxfA,fB。Console.WriteLinedA与 dB 较大的值为: 0,c.MaxdA,dB。Console.WriteLinemA与 mB 较大的值为: 0,c.MaxmA,mB。Console.Wri
40、teLinecA与 cB 较大的值为: 0,c.MaxcA,cB。Console.ReadLine 。程序运行结果为:iA 与 iB 较大的值为: 80可编辑资料 - - - 欢迎下载精品名师归纳总结fA 与 fB 较大的值为: 8.8 dA 与 dB 较大的值为: 7.2 mA 与 mB 较大的值为: 9.8 cA 与 cB 较大的值为: b在上面的程序例题中,由于float 类型可以隐式转换为double 类型,因此比较float 类型的值大小的方法可以省略。int 类型可以实现隐式转换,但由于int 类型既可以隐式转换为double 类型,也可以隐式转换为decimal 类型,所以,比较
41、int 类型值大小的方法不能省略,以免产生调用的二义性。4.4 构造函数构造函数是一种特殊的方法成员,构造函数的主要作用是在创建对象(声明对象)时初始化对象。一个类定义必需有至少一个构造函数,假如定义类时,没有声明构造函数,系统会供应一个默认的构造函数,假如声明白构造函数,系统将不再供应构默认造函数。假如只有默认构造函数,在创建对象时,系统将不同类型的数据成员初始化为相应的默认值,如,数值类型被初始化为0,字符类型被初始化为空格,字符串类型被初始化为null(空值),规律( bool )类型被初始化为false 等。例如下面的程序:using System 。class student/ 类名为 student/声明字段 public string id 。public string name 。public bool sex 。public int age 。class Class1static void Mainstring argschar SSex。student S1=new student 。if S1.sex=trueSSex=男。elseSSex=女。Console.Write