第4章 C#基础_幻灯片.ppt_第1页
第4章 C#基础_幻灯片.ppt_第2页
第4章 C#基础_幻灯片.ppt_第3页
第4章 C#基础_幻灯片.ppt_第4页
第4章 C#基础_幻灯片.ppt_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章 C# 基 础,C# 基 础,C#是从C和C+发展而来,它继承了C+和Java语言的优点,是面向对象的高级程序设计语言,它具有功能强大和语言简洁高效、与Web技术紧密结合、完整的安全和错误处理机制等特点。C#是Microsoft .Net的核心编程语言,C#充分利用了公共语言运行时所具有的优点,使其能够方便的与其它程序进行集成和交互。,4.1 C#简介,4.1.1 C#语言的特点 C#是专为.NET开发平台而设计的编程语言,两者紧密结合,C#语言的最大特色去掉了C/C+中的指针,C#中对类、方法的引用变得简单,只有一个“.”符,C#只允许单继承,不允许多继承, C#中不允许定义全局变量和

2、全局函数。 C#与web技术紧密结合, C#具有完善的安全性和错误处理,在C#中的设计中消除了软件开发中常用的错误,并提供完整的安全机制,另一方面C#能以更少的代码实现同样的功能。,4.1 C#简介,4.1.1 C#语言的特点 C#是专为.NET开发平台而设计的编程语言,两者紧密结合,.NET的各种优点通过C#体现出来,但是C#没有自己的运行库,C#作为.NET的服务提供者之一,它使用.NET的类库,这些类库也为.NET平台的其他开发语言提供支持,这正是.NET开发平台的突出特点 C#与web技术紧密结合,C#通过SOAP(Simple Object Access Protocol)实现了应用

3、程序的解决方案与web标准相统一。,4.1.2 命名空间(namespace),在面向对象程序开发中,不管使用什么开发语言都离不开开发环境中的对象,这些对象均是各个语法所提供的“资源”,在.NET中把这些资源叫做命名空间。在C#中命名空间namespace是保留字.,4.1.3 C#与其他语言的比较,C#从C/C+发展而来,C#比C+更易于掌握,是一种快速的开发语言。与Java语言相比C#具有比Java更强大的功能,在面向对象程序设计过程中比Java更简单,面向对象程度更高。C#比Java 执行速度快。,4.1.4 中间语言(Intermediate Language),中间语言和Java字节

4、码都属于编译后生成的形式,它们都属于一种低级语言,二者都可以很快的转换为机器码。Java字节码具有平台独立性,但要安装有Java虚拟机,由虚拟机对字节码解释执行。中间语言也有相同的功能,但它更强大,它采用JIT(just-in-time)编译方式,它是由.NET编译码对C#源代码编译产生的,类似于机器指令,但独立于任何特定的处理器。,中间语言(Intermediate Language),中间语言的主要特性为:具有类在单一继承方式下的面向对象编程,强大的类型系统,具有值和引用类型,以及接口处理能力,异常处理错误功能。,一个C#应用程序,using System; namespace MyFir

5、st public class HelloWorld public static void Main ( ) Console.WriteLine(“Hello,World!”); ,4.1.6 注释,注释是写应用程序的一个重要环节。C#支持两种形式的注释:单行注释和多行注释,其规则与C+相同。 “/”符号只注释本行代码,它是单行注释符。 多行注释开始标记为一个反斜杠加上一个星号“/*”,结果标记正好相反,为一个星号加上一个反斜杠“*/”,位于开始标记和结束符之间的内容都被注释。多行注释不要相互嵌套,否则易产生错误。,4.2 数据类型和表达式,在C# 中数据类型分为两种:值类型和引用类型。值类型

6、包括一些简单类型(例如,char、int和float),枚举类型和结构类型。引用类型包括类、接口、代表(delegate)和数组类型。在计算机中值类型的数据存储使用堆栈,其数据长度是不变的,值类型变量直接包含了数据,而引用类型的数据存储使用堆,其数据长度是可变的。,4.2.1 值类型,1整数类型 在C# 中数据类型分为8种类型,有符号整数类型有字节型(sbyte)、短整型(short)、整型(int)和长整型(long);无符号整数类型有无符号字节型(byte)、无符号短整型(ushort)、无符号整型(uint)和无符号长整型(ulong)。C#中的每一种整数类型都与.Net类库中定义的一个

7、结构相对应,例如,字节型sbyte 与System. Sbyte对应。,4.2.1 值类型,2浮点类型 在C#中浮点类型的数据包括两种:单精度( float)和双精度(double)双精度的取值范围比单精度的取值范围大,精度也高计算机对浮点数的运算速度要比整数的运算速度低得多,4.2.1 值类型,3. 小数类型 小数类型的数据精度较高,小数类型的数据后面必须跟m或者M后缀,如: decimal x=1.2mj 小数类型和浮点类型之间无隐式转换,如进行强制性置式转换将会产生数据丢失,因此一般不在一个表达式中同时使用这两种数据。,4.2.1 值类型,4布尔类型 布尔类型(bool)表示布尔逻辑量,

8、只能是true或者false占4个字节,在C#中bool类型对应于. NET类库中的System. Boolean结构。如定义x为布尔类型变量的例子为: bool x=true;,4.2.1 值类型,5字符类型 字符包括单个字母、数字、标点符号以及特殊的控制字符。C#提供的字符类型采用unicode字符集,一个unicode 字符长度为16bit,对字符型变量的声明和赋值为: char x=b;/ 用单引号把字符括起来。 反斜杠“”在C# 用来引导各种转义符,这与C+ 、Java语言一样。,4.2.1 值类型,结构类型 在处理较复杂的数据时,通常将一些相关的数据作为一个整体来处理。例如,一个教

9、师的职工号、性别、年龄、所教课程、课号等。我们可以把这些数据组合起来,在C# 中实现这一功能可通过结构类型实现,把这些变量作为结构类型数据成员,结构类型采用struct进行声明。,4.2.1 值类型,6枚举类型 枚举(enumerate)是一组密不可分的数据项的组合,枚举类型要求成员是整数类型,使用关键字enum来定义。例如,我们声明一个代表星期日的枚举类型数据: enum week Sun,Mon,Tue,Wed,Thu,Fri,Sat 枚举类型的变量在某一时刻只能代表枚举项中的一个值,对枚举成员的访问通过“”完成,如 week day; day=week.Mon;,4.2.1 值类型,7结

10、构类型 在处理较复杂的数据时,通常将一些相关的数据作为一个整体来处理。例如,一个教师的职工号、性别、年龄、所教课程、课号等。我们可以把这些数据组合起来,在C# 中实现这一功能可通过结构类型实现,把这些变量作为结构类型数据成员,结构类型采用struct进行声明。,4.2.2 引用类型,1. 类 在面向对象设计方法学中,类是一系列具有相同性质的对象的抽象,类是一个数据结构,将对象的属性(状态)和方法(行为)统一在一个单元中,是对对象共同特征的描述。以学生为例,所有学生都有学号、姓名、性别、年龄、所属系别、联系电话等,将这些共同的特征和一些方法定义在一个模板中就构成了学生类,如果这个学生类中指定了具

11、体的值,如“200011070,张亮,男,20,计算机科学系,67698623”,这就是学生类的一个实例,或者叫对象。对象是类的一个实例。 类和对象是密切相关的,没有脱离对象的类,也没有不依赖类的对象。 类支持继承机制,通过继承和派生类可以扩展类的数据成员和函数成员,从而达到代码复用的目的。有关类的详细情况将在第4节中详细叙述。,4.2.2 引用类型,2. 接口(interface) 上面讲过类是一系列具有相同性质的对象的抽象,而接口是定义一个约定,是对一组能够提供相同服务的类的抽象,接口对程序中的各个类进行分组。接口通过关键字interface进行定义。接口支持多继承( multiple i

12、nheritance)。,4.2.2 引用类型,3.代表 (delegate) 代表类似于C+编程语言中的函数指针,但与函数指针不同,代表是面向对象和类型安全的。用来封装某个方法的调用过程。代表delegate是关键字,它所封装的方法一定要与某个类或对象相关联。代表将方法处理为实体,使其能够被赋值给变量,并作为参数传递。代表的使用分3步:定义、实例化和调用。如: delegate int w1(string text) ; delegate void w2( ); 代表的实例化使用new来完成,同时还需要指定所封装的方法,如: WL td = new W2( ) ; 这样td就是系统定义的类S

13、ystem delegate的一个扩展。,4.2.2 引用类型,4数组(array) 数组是一个包含若干变量的数据结构,这些变量都可以通过计算索引进行访问。数组中包含多个数据对象,这些数据对象具有相同的数据类型,每个数据对象叫做数据元素。数据元素的类型可以是任何一种值类型,可以是类,也可以是数组。 数组的维数称为数组的“秩”,“秩”为1数组称为1维数组,秩为2的数组称为2维数组。在C#中所有的数组都是从NET类库中的SystemArray类库中派生的。在C#中规定下标从0开始,即第一个元素的索引为0,第二个为1,以此类推。,4.2.2 引用类型,一维数组在定义时,需要指明数组元素的类型和数组的

14、名称,如定义一个整型数组: int myarray ;数组必须在初始化之后才能使用,数组初始化需要使用关键字new进行,初始化后就可以对各个数组元素进行赋值,如: int myarray = new int 3 ;/ myarray有3个整数元素。 myarray0=2; myarray1=1; myarray2=4; 对上面数组进行初始化和赋值,也可以写成以下形式: int myarray=new int 2,1,4; 或者int myarray = 2,1,4 当数组元素的类型为值类型时,数据直接存储在数组中,数组所占的内存空间等于数组的长度乘以单个元素的所占内存空间的长度。当数组元素的类

15、型为引用类型时,数组中存放的只是引用对象的地址。,4.2.3 表达式,1.操作符 表达式由操作数和操作符组成。操作符指明作用于操作数的操作方式,操作数可以是一个常量、变量,或者是另一个表达式。 根据操作数所作用的个数,操作符可以分为3类: 一元操作符:仅作用于一个操作数的操作符,如+操作符,一元操作符又可分为前缀操作符和后缀操作符。 二元操作符:作用于两个操作数之间的操作符,比如“+” 。 三元操作符:作用于三个操作数的操作符。C#中仅有一个三元操作符,即“?:”。 当一个表达式中有多个操作符时,表达式的求值顺序由操作符的优先级决定:即先执行优先级高的操作符,将运算结果再作为低优先级的操作符的

16、操作数。优先级的顺序可通过小括号改变。赋值操作符和条件操作符属于右结合操作符,其它的所有二元操作符都是左结合。,4.2.3 表达式,2. 算术运算表达式 最常用的操作符是加(+)、减(-)、乘(*)、除(/)4个操作符。它们可以作用于整数和实数类型,当两种不同类型的操作数进行运算时,结果的类型与精度最高的操作数类型相同。“/”用来求除法的商,“%” 求除法的余数。 如 7/2结果为3,而7.0/2结果为3.5。如果两个整数类型的变量相除又不能整除的话,返回的结果是不大于相除之值的最大整数。,4.2.3 表达式,3. 逻辑操作符 C#提供了3种逻辑操作符: 逻辑“与”( 在面向对象程序设计中由访

17、问修饰符来对变量进行访问限制,C#提供了下面几种访问修饰符: public表示对变量的访问不受任何限制; protected表示可以在类的内部访问该变量; protected表示只能在包含变量的类或类生类中对变量进行访问; internal表示变量的访问范围只能在当前工程或模块内; private表示变量的访问只能在包含它的类中。 修饰符static表示变量为静态变量,ref表示变量为形式参数变量。变量的数据类型为C#中对应的关键字。,4.3 变量和参数,1. 静态变量与实例变量 用static修饰符声明的变量为静态变量。所谓静态变量指变量只需创建一次,在后面的程序中可以多次引用。如果类中的一

18、个成员变量被定义为静态的,那么类中的所有成员都可以共享这个变量。静态变量的初始值就是该变量类型的默认值。 未用static修饰符声明的变量为实例变量。当个类的实例被创建后,直到实例在内存中被释放,该实例变量就一直存在。,4.3 变量和参数,2. 局部变量 局部变量指在一个独立的程序中声明的变量,它只在该程序块中有效, 程序离开这个范围变量就失效。如for循环语句中控制循环次数的变量。 局部变量不会被自动初始化,因此它没有默认值,在其有效范围内也同样要先声明后使用。,4.3 变量和参数,3. 值参数 未用ref或out修饰符声明的参数为值参数。 值参数在调用该参数所属的函数成员时开始存在,并用调

19、用中给定的自变量的值初始化。,4.3 变量和参数,4.引用参数 用ref修饰符声明的参数是引用参数。变量作为引用参数在函数成员调用之前必须先赋值,在函数成员内部,引用参数被视为已赋值。 在结构类型的实例方法或实例访问器内部,关键字this的行为与该结构类型的引用参数相同。,4.3 变量和参数,5. 输出参数 用out修饰符声明的参数是输出参数。输出参数不会被保存到新的存储位置。 变量作为输出参数在函数成员调用中传递之前不一定要显式赋值。在函数成员内部,输出参数被视为未赋初始值。函数成员的每个输出参数在该函数返回前都必须明确赋值。 关键字this的行为与该结构类型的输出参数相同。,4.3 变量和

20、参数,6. 常量 C#中可用两种方式来定义常量,常数常量和只读常量。 常数常量使用关键字const来定义,要求在定义时赋值。 如:public const double pi=3.141592 ; 这样定义pi为常量后,对常量pi的操作只能是读,不能对pi进行修改。常数常量通常为值类型,如果是引用类型必须在初始化时为其赋予null值。 在定义常量时,可以使用修饰符new , public , protected , internal和private进行限制。 只读常量使用关键字readonly来定义。只读常量的值在程序运行中第一次使用时被确定,只读常量前加修饰符static表示是静态的,不加s

21、tatic表示为非静态只读常量。只读常量只能读取常量的值,不允许对其进行修改。,4.4 流程控制,通常情况下,程序中的代码是顺序执行的,若要改变代码的执行顺序,就要使用流程控制,流程控制语句分为3类,即条件控制,循环控制和跳转控制。 条件控制:以特定的值或表达式决定是否执行程序分支,使用的关键字有if和switch等。 循环控制:使重复执行某段程序代码,使用的关键字有while, do, for, foreach等。 跳转控制: 使程序转移执行,使用的关键字有goto, break, continue等。,4.4.1条件控制,当程序中需要两个或两个以上的选择时,可以使用条件语句判断要执行的语句

22、段。C#提供两种选择语句:一种是条件语句,即if语句,另一种是开关语句,即switch语句。它们都可以用来实现多路分支,从一系列可能的程序分支选择要执行的语句。,4.4.1条件控制,1. if语句 if语句根据布尔类型的表达式的值选择要执行的语句,该语法结构与C/C+一样,最简单的if语句只设置一条选择路径,语法为if(布尔表达式) if(布尔表达式) expression; 该结构中当表达式的值为true时,执行大括号里的表达式,否则语句结束。如果大括号里的语句只有一行,大括号可以省略,这种结构称为单if结构流程图,,4.4.1条件控制,2. Switch语句 当判断的条件相当多时,使用el

23、se if语句会使程序变得难以阅读,这时使用switch语句进行操作就十分方便,switch根据一个表达式的多个可能取值来选择执行的代码段。其语法为: switch(判断对象) case 常量表达式-1; statement-1; break; case 常量表达式-2; statement-2; break; . default: statement-n; break; ,4.4.1条件控制,switch语句的控制类型由switch表达式建立。如果switch表达式类型sbyte , byte , short , ushort , int , uint , long , ulong , ch

24、ar , string或枚举类型,这就是switch语句的控制类型。也可以是用户定义隐式转换语句把switch表达式类型转换为switch语句的控制类型。每个switch语句最多只能有一个default分支,也可以没有。 switch语句执行规则如下: 计算出switch表达式的值并转换为主导类型。 如果switch表达式的值等于某一个switch分支的常量表达式的值,那么程序将转换到这个case标号后的语列表中。 如果switch表达式的值无法与switch语句中任何一个case常量表达式相匹配,并且有default分支,则程序会跳转到default标号后的语列表中。 如果switch表达式

25、的值无法与switch语句中任何一个case常量表达式相匹配,并且没有default分支,则程序会跳转到switch语句的结尾。 每一个break语句都将会结束switch语句。在C/C+中允许switch语句中case标签后可以没有break语句,但C#每个case标签后必需要有break语句或goto语句,return语句或throw语句。,4.4.2 循环语句,循环语句可以实现程序的重复执行,C#提供4种循环语句:while语句,do-while循环语句,for语句和foreach语句,程序员可根据实际需要进行选择。 1.while循环语句的语法格式为: while(布尔表达式) sta

26、tement; 其执行顺序为:先计算布尔表达式的值,若值为true则执行语句statement然后重新执行步骤;若布尔表达式的值为false则结束循环。,4.4.2 循环语句,2. Dowhile 语句 dowhile循环语句与while循环语句功能相近,但与while语句不同的是,dowhile语句至少执行一次内嵌语句或者更多次。其语法是: do statement; while(布尔表达式),4.4.2 循环语句,3. for循环语句 for循环语句和while,do循环语句一样可以重复执行某一段的程序代码,但for循环语句更灵活,因为for语句将初始值,布尔判断式和更新值都写在同一行代码

27、中。其语法格式为: for(初始值;布尔判断式;更新值) 循环体 ,4.4.2 循环语句,其中,初始值和更新值可以是一个简单的表达式,也可以用逗号分隔若干个表达式;表达式一般是关系表达式或逻辑表达式,也可以是算术表达式或字符表达式等。for循环执行过程为: 首先求解初始值。 判断布尔表达式中的条件是否满足。 若布尔判断式为真或条件满足,则执行循环体,然后再执行步骤(d)。若布尔表达式为假,则结束循环,程序转向执行循环体下面的语句。 执行完循环体之后,对更新值进行重新计算。 转回步骤(b)继续执行。 for循环体里还可以嵌套for循环,如果for循环体内有break语句,则结束这个for循环。如

28、果for循环体有continue语句,则结束本次循环,重新开始执行for语句的下一次循环。,4.4.2 循环语句,4. foreach循环语句 foreach循环语句是C#中独有的循环语句。它对于处理数组和集合等数据类型的运算特别简便。foreach语句用于列举集合中的每一个元素,并且通过执行循环体对每一个元素进行操作。foreach的语法格式为: foreach(数据类型 变量 in 集合表达式) 循环体; ,4.4.3跳转控制,跳转控制主要用来实现程序的跳转来改变程序的执行顺序。C#中的跳转语句主要有goto, 语句,break语句, continue语句,return语句。 1. bre

29、ak语句和continue语句 break语句主要用于switch , while , do-while , for或foreach等语句中,用来中断当前的选择或循环并跳出当前的选择或循环语句。具体应用参见程序P4-14。 continue语句主要用于while , do-while , for或foreach等这些循环语句中,用于结束本次循环,即跳过continue语句后面尚未执行的语句,但并未跳出循环体,接着执行下一次循环的判定。,4.4.3跳转控制,2. goto语句 goto语句是典型的非结构化程序控制语句,在程序中应尽量避免使用。它用于程序的无条件转移,使用goto语句时需要在程序中

30、先声明。 例 求1100的偶数的和。,4.4.3跳转控制,3. return语句 return语句用于将控制权返回到出现return的函数的调用方。return语句要求后跟与方法返回类型相同的表达式。如果方法返回类型为void,则可以使用不带表达式的return语句。,4.4.4 异常处理,程序在执行时,可能会发生一些不可预测的错误或异常。比如发送电子邮件过程中,突然网络不通,这时就要采用异常处理来解决这种异常或错误。在C#中,所有的异常都由System . Exception派生的,当出现异常或错误时,编写中止异常或错误代码放在finally块中。 C#中存在下列两种情况会产生异常: (a)

31、在C#语句和表达式处理过程中激发了某个异常条件,使得操作无法正常结束产生异常。 (b)throw语句抛出异常。 异常是由try语句处理,try语句有以下三种形式: try-catch try-finally try-catch-finally,4.4.4 异常处理,1. try-catch语句 C#语言通过try语句的控制机制来检测代码中的异常并做出相应的处理,正常情况try代码中的语句依次执行,而catch代码段不会被执行,当出现异常时就执行catch语句进行异常处理。一个try语句可以有多个catch语句,如果两个catch语句所捕获的异常类有继承关系,那么要保证派生类的catch语句在前

32、,基类的catch语句在后,否则,派生异常类的catch语句失效。,4.4.4 异常处理,2. try-finally语句 try-finally语句中没有catch,因此不对异常进行处理。如果发生异常,该异常将执行完finally代码段之后被抛出,尽管是异常处理语句,但是并不能处理异常。不管是否发生异常,finally语句都将被执行。,45 类,4.5.1 类声明 类声明是一个类型声明,C#类的声明格式如下: 类修饰符 class 类的成员定义(类体); ; class是定义类的关键字,是种标识符,类的成员定义包含数据成员和函数成员两部分定义。,类修饰符包括:new、public、prote

33、cted、internal、private、abstract和sealed。其中: new只允许出现在嵌套类中,它表明一个类通过相同的名称隐藏了一个继承的同名成员。 public、protected、internal和private类修饰符控制类的访问能力。类修饰符默认为public,public表示外界不受限制的访问该类;protected类修饰符表示只能从所在的类和其派生的子类访问;internal类修饰符表示本应用程序可以访问该类;private类修饰符表示该类只有在定义它的类中可以访问。 abstract定义抽象类,说明该类是一个不完整的类,只有声明而没有具体实现。一般只能用来作为其他

34、类的父类。 sealed修饰符说明不能从该类派生出另一种类。,4.5.2 对象的创建 创建类实例的格式如下: 类名 实例名=new类名(参数); new关键字调用类的构造函数来完成实例的初始化工作。例如: employee p1=new employee(9901,”王海”, ”男”,”广州市中山大道西109号”); 也可以使用下述两条语句: employee p1; p1=new employee(9901,”王海”, ”男”,”广州市中山大道西109号”),4.5.3 类的成员 1类的成员分类 类的成员根据是否为函数可将其分为数据成员(常量、域)和函数成员(方法、属性、索引器、事件、运算符

35、、构造函数、析构函数等)。 2类成员的访问权限 对类中的成员有五种访问权限:缺省访问权限是“private”。 “public” :该成员可以被所有代码访问; “protected”: 该成员只可以被继承类访问; “internal”: 该成员只可以被同一个项目的代码访问; “protected internal”:该成员只可以被同一个项目的代码或继承类访问; “private”:该成员只可以被本类中的代码访问。,3静态成员和实例成员 类的成员要么是静态成员,要么是实例成员(非静态成员)。当用static修饰符声明后,则该成员是静态成员。如果没有static修饰符,则该成员是实例成员。,4.5

36、.4 类的构造函数和析构函数 构造函数和析构函数是在类体中说明的两种特殊的成员函数。构造函数的功能是在创建实例(也就是对象)时,使用给定的值来将实例初始化。析构函数的功能是用来从内存中释放一个实例的,在删除实例前,用它来做一些清理工作,它与构造函数的功能正好相反。,构造函数的特点如下: 1、构造函数是成员函数,该函数的名字与类名相同。 2、构造函数是一个特殊的函数,该函数无数据类型,它没有返回值。该函数可以一个参数,也可以有多个参数。 3、构造函数可以重载,即可以定义多个参数个数不同的函数。 4、程序中不能直接调用构造函数,在创建实例时系统自动调用构造函数。 5、当类没有构造函数时,编译系统自

37、动生成函数体为空的一个默认的构造函数,其形式如下: public TPoint() /默认的构造函数 ; 6、构造函数访问权限总是public 。如果是private,则表示着该类不能被实例化,这通常在只含有静态成员的类中。,析构函数的特点如下: 1、析构函数是成员函数,函数体可写在类体内,也可定在类体外。 2、析构函数也是一个特殊的函数,它的名字同类名,并在前面加“”字符,用来与构造函数加以区别。析构函数不能有参数,无数据类型。 3、一个类中只可能定义一个析构函数。 4、当撤销对象时,析构函数自动被调用。 5、析构函数不能被继承和重载。,46 方法,4.6.1 方法定义 方法定义格式: 方法

38、修饰符 返回类型 方法名(形式参数列表) 方法实现部分; ,4.6.2 方法参数 方法的参数被方法的形式参数列表所声明。方法有四种形式参数: 数值参数,它不用任何修饰符声明。 引用参数,它用ref修饰符声明。 输出参数,它用out修饰符声明。 参数数组,它用params修饰符声明。,4.6.3 this关键字 this关键字只能在方法中使用,它能为调用该方法的对象提供相应的句柄,使得同一个类产生的不同对象实例在调用同一方法的时候,系统能判断出是哪一个对象在进行调用。 比如: MyObject a=new MyObject(); MyObject b=new MyObject(); a.f();

39、/(3) b.f();/(4) 编译器在编译的时候,实际上是将(3),(4)句解释为: MyObject.f(a); MyObject.f(b); 这样就将调用了该方法的对象的信息传到了方法中,也就是传给了this,就可以通过this表示调用该方法的对象实例。,4.6.4 静态方法和非静态方法 静态方法属于是类所有,是所有对象实例公用的方法,只能用类名调用静态方法。它不属于某一个具体的对象实例,因此静态方法中没有隐含的this,也就是说我们不能通过this获得调用该方法的对象。既然找不到这个对象实例,我们不能在其中访问该对象实例的成员,这和非静态方法是不一样的。 类的静态方法中不能直接访问类的

40、非静态成员而只能访问类的静态成员,类的非静态方法可以访问类的所有成员和方法,因为静态方法属于类,而非静态方法属于类的实例。 举例:演示静态方法和非静态方法的规则。,4.6.5 方法的重载 所谓方法重载就是指同一个方法名有多个不同的实现方法。具体地讲,定义方法重载时要求方法的参数或者至少有一个类型不同,或者个数不同。 举例:求体积volume方法中使用重载。,4.6.6 运算符重载 运算符重载就是赋予已有的运算符多重含义。C#中通过重新定义运算符,使它能够用于特定类的对象执行特定的功能,这便增强了C#语言的扩充能力。运算符重载还使程序更加简洁,使表达式更加直观,增加可读性。,一个类的数据成员变量

41、可以有两种方式:域(Field)、属性。域作为数据成员变量可以被直接访问,而属性不能直接进行访问,必须通过访问器进行访问。 4.7.1 域 域定义格式: 域修饰符 数据类型 域名; 域修饰符包括:public、protected、internal、private、static及readonly等。 域的定义中如果加上了readonly修饰符,表明该域为只读域。对于只读域我们只能在域的定义中和它所属类的构造函数中进行赋值。在其他情况下,域是只读的。 域又分为实例域和静态域。实例域属于具体的对象,为特定的对象所专有。静态域属于类,为所有对象所共用。C#严格规定实例域只能通过对象来获取,静态域只能通过类来获取。,47域和属性,4.7.2 属性 属性可以说是C#语言的一个创新。充分体现了对象的封装性,把要访问的域设为private,不直接操作类的域,而是通过访问器进行访问,即借助于get和set访问器对属性的值进行设置或访问(即读写)。get方法没有参数;set方法有一个隐含的参数value。属性的get访问器都通过return来读取属性的值,set访问器都通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论