第三章 C#程序设计基础_第1页
第三章 C#程序设计基础_第2页
第三章 C#程序设计基础_第3页
第三章 C#程序设计基础_第4页
第三章 C#程序设计基础_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

1、第第3章章 C#程序设计基础程序设计基础 内容提要n本章主要分析本章主要分析C#的语法,的语法,C#作为作为.NET的原生语言,功能非常强大。的原生语言,功能非常强大。n作为作为ASP.NET的编程基础,主要分析的编程基础,主要分析C#的变量、常量、控制语句、的变量、常量、控制语句、C#的异常处的异常处理、理、C#类的基本使用方法和类的基本使用方法和C#语言面语言面向对象的高级特性。向对象的高级特性。 3.1 C#概述 nC#是微软公司专门为.NET量身定做的编程语言,它与.NET有着密不可分的关系。nC#的类型就是.NET框架所提供的类型,C#本身并无类库,而是直接使用.NET框架所提供的类

2、库。n另外,类型安全检查、结构化异常处理也都是交给CLR处理的。因此,C#是最适合开发.NET应用的编程语言。 C#的特点 nC#不仅具有C+的强大功能,而且具有Visual Basic简单易用的特性。C#的语法与C+基本相同。n默认情况下,C#代码在.NET框架提供的受控环境下运行,增强了程序的安全性。nC#不推荐使用指针,若要使用指针,必须使用关键字 “unsafe”将代码声明为非安全的。nC#采用垃圾回收机制,能够在合适的时机回收不再使用的内存资源。Framework命名空间 n命名空间用于组织.NET Framework提供的几千个类。n作为组织类的逻辑单元,命名空间成了应用程序的组织

3、形式。n使用命名空间可以解决类名冲突问题。n利用using语句导入命名空间,如“using system;”表示导入system命名空间。C#程序结构 案例名称:第一个案例名称:第一个C#程序程序程序名称:程序名称:3-01.csusingSystem;classHellopublicstaticvoidMain()Console.WriteLine(您好!);C#编译器 n.NET Framework SDK内置了C#编译器“csc.exe(C Sharp Compiler)”,该文件在“WINDOWSMicrosoft.NETFrameworkv版本号”目录下。n如果不能执行该命令,需要将

4、该目录添加到操作系统的PATH变量中。可以在命令窗口编译C#文件,假如要编译名为3-01.cs的C#文件。命令行的语法为:ncsc 3-01.cs不用不用using导入命名空间导入命名空间案例名称:不用案例名称:不用using导入命名空间导入命名空间程序名称:程序名称:3-02.csclassHellopublicstaticvoidMain()System.Console.WriteLine(您好!);程序的输入和输出 n其中,“0”代表第一个参数,“n-1”代表第n个参数案例名称:利用案例名称:利用ReadLine()读入数据读入数据程序名称:程序名称:3-03.csusingSystem

5、;classHellopublicstaticvoidMain()Console.Write(请输入你的名字:);stringstr_bookName=Console.ReadLine();Console.WriteLine(您好!0,str_bookName);命令行参数 案例名称:使用命令行参数案例名称:使用命令行参数程序名称:程序名称:3-04.csusingSystem;publicclassHellopublicstaticvoidMain(stringargs)Console.WriteLine(你共有0个朋友,args.Length);Console.WriteLine(你的朋友

6、列表为:);for(inti=0;iargs.Length;i+)Console.WriteLine(Arg0=1,i,argsi);C#注释 案例名称:使用注释案例名称:使用注释程序名称:程序名称:3-05.csusingSystem;classHellostaticvoidMain()/*声明一个DateTime变量t并将当前日期赋给t*/DateTimet=DateTime.Today;stringstr_Time;/声明一个字符串变量str_Timestr_Time=t.ToLongDateString();Console.WriteLine(当前日期是:0,str_Time); 变量

7、和常量 nC#是大小写敏感的,即大写和小写字母认为是不同的字母。例如变量名something,Something,SOMETHING都是不同的名字。n命名变量名要遵守如下的规则:n不能是C#关键字n第一个字符必须是字母或下划线n不要太长,一般不超过31个字符为宜 n不能以数字开头n中间不能有空格n变量名中不能包含“.;,”+-”之类的特殊符号。一般情况下,变量名中除了能使用26个英文大小写字母和数字外,只能使用下划线“_”n另外,C#允许在变量前加上前缀,也允许使用前缀加上关键字作为变量,如string using,但建议不用。变量声明变量声明n变量的修饰符有 public、internal、

8、protected、protected internal、private、static和readonly。nC#中将具有这些修饰符的变量称为域域(字字段段),而把方法中定义的变量称为局部变局部变量量。n注意:局部变量前不能添加public、internal、protected、protected internal、private、static和readonly等修饰符。修饰符修饰符n访问修饰符 npublic:访问不受限制,任何地方都可访问。ninternal:允许同一程序集中的应用程序可以访问。nprotected:在所属的类或派生类中能被访问。nprotected internal:允许同

9、一程序集中的应用程序可以访问、所属类或派生类中能被访问。nprivate:在所属的类中能被访问。修饰符(续)修饰符(续)nstatic使用static声明的变量称静态变量,又称为静态字段。访问静态字段时只能通过类直接访问,而不能通过类的实例来访问。nreadonly使用readonly声明的变量称为只读变量,这种变量被初始化后在程序中不能修改它的值。变量的作用范围变量的作用范围n块级:作用域范围最小的变量,如包含在if、while等语句段中的变量。这种变量仅在块内有效,在块结束后即被删除。n方法级:作用于声明变量的方法中,在方法外不能访问。n对象级:作用于定义它的类的所有方法中。常量声明常量声

10、明n常量具有在编译时值保持不变的特性,声明时使用const关键字,同时必须初始化。案例名称:使用常量案例名称:使用常量程序名称:程序名称:3-06.csusingSystem;classHellopublicconst doublePI=3.14159265;staticvoidMain()Console.WriteLine(“圆周率PI的值为0”,PI);3.2 C#的数据类型 nC#的数据类型分为值类型(Value Type)和引用类型(Reference Type)两大类。n值类型包括简单类型(Simple Type)、结构类型(Struct Type)和枚举类型(Enum Type)3

11、种。n引用类型包括类类型(Class Type)、数组类型(Array Type)、委托类型(Delegate Type)和接口类型。 值类型-简单类型 n简单类型,是直接由一系列元素构成的数据类型。nC#语言中提供了一组已经定义好的简单类型。可以分为整数类型、布尔类型、字符类型和实数类型。 简单类型-整数类型 n整数类型变量的值为整数。计算机的存储单元是有限的,所以计算机语言提供的整数类型的值总是在一定的范围之内。nC#中有八种整数类型,这些整数类型在数学上的表示以及在计算机中的取值范围如下表所示。 整整数数类型在计算机中的取值范围类型在计算机中的取值范围整数类型特征取值类型sbyte有符号

12、8位整数-128-127byte无符号8位整数0-255short有符号16位整数-32768-32767ushort无符号16位整数0-65535int有符号32位整数-2147483648-2147483647uint无符号32位整数0-4294967295long有符号64位整数-9223372036854775808-9223372036854775807ulong无符号64位整数0-18446744073709551615使用整数类型使用整数类型案例名称:使用整数类型案例名称:使用整数类型程序名称:程序名称:3-07.csusingSystem;classHellopublicsta

13、ticvoidMain()shortx=32766;x+;Console.WriteLine(x);x+;Console.WriteLine(x);简单类型-布尔类型 n布尔类型是用来表示“真”和“假”的。布尔类型表示的逻辑变量只有两种取值。在C#中,分别采用true和false两个值来表示。n在C语言中,用0来表示“假”,其他任何非零的值表示真。在C#中,布尔型变量只能是true或者false。简单类型-实数类型 n实数在C#中采用两种数据类型来表示:单精度(float)和双精度(double)。它们的区别在于取值范围和精度不同。n单精度:取值范围在正负1.5*10-45到3.4*1038之

14、间,精度为七位。n双精度:取值范围在正负5.0*10-324到1.7*10308之间,精度为15-16位。n十进制(decimal)类型,主要用于方便做金融和货币方面的计算。使用m后缀来表明它是一个decimal型。如: decimal cur=100.0m 如果省略了m,则变量被赋值之前将被编译器认作double型。简单类型-字符类型 n字符类型采用Unicode字符集标准,一个字符长度为16位,用它可以表示世界上大多数语言。nchar类型变量声明时必须包含在一对单引号中。n例nchar mychar=M;n也可以直接通过十六进制或者Unicode赋值。 char mychar=x0034;

15、/mychar=4 char mychar=u0039;/mychar=9常用转义符对应表转义符转义符对应字符对应字符转义符转义符对应字符对应字符单引号单引号t水平水平tab双引号双引号n换行换行反斜杠反斜杠r回车回车0空字符空字符b退格退格值类型-结构类型 n把一系列相关的变量组成一个单一的实体,其类型称为结构,采用关键字struct来进行声明。n结构也是一种封装,把同一事物的属性和方法封装到一个结构体中。可实现接口,可拥有与类相同的成员。n与类的主要区别:结构是值类型而不是引用类型;结构不支持继承。案例名称:使用结构类型案例名称:使用结构类型 usingSystem;publicstruc

16、tStudentInfopublicstringName;publicstringphone;publicstringAddress;StudentInfostStudent;/stStudent为一个StudentInfo结构类型变量值类型-枚举类型 n枚举类型是由一组命名常量组成的类型,使用enum关键字声明。n枚举中每个元素默认是整数类型,且第一个值为0,后面每个连续的元素依次加1递增。若要改变默认起始值0,可以通过直接给第一个元素赋值的方法。n枚举类型的变量在某一时刻只能取枚举中某一元素的值。使用枚举类型案例名称:使用枚举类型案例名称:使用枚举类型程序名称:程序名称:3-09.csus

17、ingSystem;enumWeekDaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;classTeststaticvoidMain()WeekDayday;/声明WeekDay的实例day;day=WeekDay.Sunday;Console.WriteLine(day的值是0,day);引用类型 nC#中的另一大数据类型是引用类型。“引用”的含义是:该类型的变量不直接存储所包含的值,而是存储所要存储值的地址。nC#中的引用类型有四种:类类型类类型、数组数组类型类型、委托类型委托类型和接口类型接口类型。 nC#中预定义的引

18、用类型:System.Object、 System.String object类型 n作为类类型之一的object类型,实质是System.Object类的别名。n可以将任何类型的数据转化为object类型。string类型 nstring类型在.net类库中对应的是System.String,实质是一种数组,即字符串可看作是一个字符数组。n在声明时要求放在一对双引号之间 。n两种包含转义符的字符串形式nstring strPath = c:ASPdefault.aspx;nstring strPath = c:ASPdefault.aspx;n运算符可访问字符串中各个字符,如:string

19、strTest = abcdefg;char x = strTest2; /x的值为cstring类型(续) n通过ToString()方法转化为string类型string strInt = 23.ToString();n使用Parse()方法或Convert类的相应方法转化为其它类型 int iString = Int32.Parse(1234); string strDatetime = Convert.ToString(DateTime.Now); 引用类型-类类型n类是面向对象编程的基本单位,是一种包含数据成员、函数成员的数据结构。n类的数据成员有域、常量和事件等。n函数成员包括方法

20、、属性、构造函数和析构函数等。n类支持继承机制,通过继承,派生类可以扩展类的数据成员和函数成员,进而达到代码重用和设计重用的目的。引用类型-数组类型n数组是一组类型相同的有序数据案例名称:使用数组类型案例名称:使用数组类型 程序名称:程序名称:3-10.csusing System;class test static void Main() int arr1=new int2; int arr2=new int1,2,3; /int arr2 = new int3 1, 2, 3 ; string arr3=six, is ,me; int, arr4=1,2,3,4; int, arr5=n

21、ew int3,4; for(int i=0;iarr1.Length;i+) arr1i=i*i*i; Console.WriteLine(arr10=1,i,arr1i); for (int i=0;i4;i+) for(int j=0;j3;j+) arr5j,i=i*j; Console.WriteLine(arr50,1=2,j,i,arr5j,i); 引用类型-委托类型委托可理解为指代,就是定义一种变量来指代一个函数或一个方法。程序名称:使用委托程序名称:使用委托程序名称:程序名称:3-11.csusingSystem;delegateintmydelegate();/声明clas

22、smyclasspublicintInstMethod()Console.WriteLine(CalltheInstMethod.);return0;classTeststaticpublicvoidMain()myclassp=newmyclass();mydelegated=newmydelegate(p.InstMethod);/实例化d();/调用,指代p.InstMethod引用类型-接口类型n接口常用来描述组件对外能提供的服务。n接口中不能定义数据,只能定义方法、属性、事件等。n包含在接口中的方法不定义具体实现,而是在接口的继承类中实现。interfaceifacevoidshow

23、myface();n参见例interface.cs 、3-12.cs、3-12_1.cs3.3 操作符与控制语句 n表达式由操作符和操作数来构造。n表达式的操作符指示出对操作数采取哪种操作。操作符的例子包括+、-、*、/和new等。操作数的例子包括文字、域、局部变量和表达式。n有三种类型的操作符:n一元操作符。一元操作符有一个操作数,包括+(一元加 )、-(一元减)、!(逻辑非)、(按位求补)、+(一元递增)、-(一元递减)、type(强制类型转换)。n二元操作符。二元操作符有两个操作数并且使用中间符号(例如x + y)包括算术操作符、位操作符、关系运算符、逻辑操作符等。n三元操作符。只有一个

24、条件操作符?:。三元操作符有三个操作数并且使用中间符号 (c? x: y)。算术操作符 n算术操作符包括基本算术操作符、一元递增( + )和一元递减( - )操作符。n基本算术操作符包括+(加)、-(减)、*(乘)、 /(除) 、%(取余)。案例名称:使用算术操作符案例名称:使用算术操作符程序名称:程序名称:3-13.csusingSystem;enumWeekdaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;classteststaticvoidMain()stringmystr1=你好!;stringmystr2=小刘;

25、stringmystr3=mystr1+mystr2;Weekdayd1=Weekday.Sunday;Weekdayd2=d1+3;Console.WriteLine(d1=0,d2=1,d1,d2);Console.WriteLine(mystr3);赋值操作符 n赋值就是给一个变量传一个新的值。在C#中,赋值分为简单赋值和复合赋值两大类。n操作符“=”是简单赋值操作符号。n复合赋值操作符号包括+=、-=、*=、/=、%=、&= (按位与) 、|=(按位或)、=(按位异或)、=(右移位) 。逻辑操作符 nC#提供的逻辑运算符有三个,就是逻辑与(&)、逻辑或(|)和逻辑非(!

26、)。n其中,逻辑与和逻辑或是二元操作符,要求有两个操作数;而逻辑非是一元操作符,只要求一个操作数。关系操作符 n关系操作符包括=、!=、=。 n其中,、=操作符适用于整数类型、实数类型;=和!=操作符适用于整数类型、实数类型、布尔类型、枚举类型、字符串类型、引用类型。分支语句n分支语句依据一个控制表达式的值,从一系列可能被执行的语句选择出要执行的语句。n包括两种语句:if语句和switch语句。使用使用if语句语句案例名称:使用案例名称:使用if语句语句程序名称:程序名称:3-14.csusingSystem;classHellopublicstaticvoidMain()Console.Wr

27、ite(请输入你的名字:);stringstr_userName=Console.ReadLine();if(str_userName=six)Console.WriteLine(您好!0,是您啊!,str_userName);elseConsole.WriteLine(0是谁?,str_userName);switch语句 案例名称:使用案例名称:使用switch语句语句程序名称:程序名称:3-15.csusingSystem;classSamplepublicstaticvoidMain()intmyage=10;stringmystr;switch(myage)case10:mystr=

28、他是学生!;break;case25:mystr=他是老师!;break;default:mystr=都不是!;break;Console.WriteLine(是的,0,mystr);循环语句 n在 C# 中可使用循环语句有4种格式:ndo-while:当(或直到)条件为 true 时循环。 nwhile:当条件为 true 时循环。 nfor:指定循环次数,使用计数器重复运行语句。 nforeach:对于集合中的每项或数组中的每个元素,重复执行。do-while循环 案例名称:案例名称:do-while循环循环程序名称:程序名称:3-16.csusingSystem;classtestpub

29、licstaticvoidMain()intsum=0;/初始值设置为0inti=1;/加数初始值为1dosum+=i;i+;while(i=100);Console.WriteLine(从0到100的和是0,sum);While循环 案例名称:使用案例名称:使用while语句语句程序名称:程序名称:3-17.csusingSystem;classSamplepublicstaticvoidMain()intsum=0;inti=1;while(i=100)sum+=i;i+;Console.WriteLine(从0到100的和是0,sum);for循环 usingSystem;classte

30、stpublicstaticvoidMain()intsum=0;for(inti=1;i100)break;sum+=j;j+;Console.WriteLine(从0到100的和是0,sum);foreach循环 usingSystem;publicclassforeachapppublicstaticvoidMain()intodd=0,even=0;intarr=newint0,1,2,5,7,8,11;foreach(intiinarr)if(i%2=0)even+;elseodd+;Console.WriteLine(even);Console.WriteLine(odd);跳转语

31、句 n跳转语句进行无条件跳转。n常用的跳转语句:break语句和continue语句。 break语句nbreak语句跳出包含它的switch,while,do,for,或foreach语句。假如break不是在switch,while,do,for或者foreach语句的块中,将会发生编译错误。 案例名称:使用案例名称:使用break语句语句程序名称:程序名称:3-19.csusing System;class test public static void Main() int sum=0; int i=1; while (true) sum+=i; i+; if (i100) break

32、; / 如果如果i大于大于100,则退出循环则退出循环 Console.WriteLine(从从0到到100的和是的和是0,sum); 案例名称:使用案例名称:使用continue语句语句程序名称:程序名称:3-20.csusing System;class test public static void Main() for(int n=100;n=200;n+) if(n%3=0) continue; Console.WriteLine(从100到200的不能被3整除的数是0,n); continue语句 ncontinue语句的功能是结束本次循环,继续下一次循环,但并不退出循环体。3.4

33、 异常处理 nC#的异常可能由两种方式导致:nthrow语句无条件抛出异常。nC#语句和表达式执行过程中激发了某个异常的条件,使得操作无法正常结束,从而引发异常。例如整数除法操作分母为零时将抛出一个异常。n异常由try语句来处理,try语句提供了一种机制来捕捉执行过程中发生的异常。Try语句有3种基本格式:ntry-catchntry-finallyntry-catch-finallytry-catch结构 案例名称:使用案例名称:使用try-catch语句语句程序名称:程序名称:3-21.csusingSystem;classSamplepublicstaticvoidMain(string

34、args)longfactorial=1;longnum=Int64.Parse(args0);trychecked/启用溢出检查,不让溢出,报出异常/计算数num的阶乘for(longcur=1;cur=num;cur+)factorial*=cur;catch(OverflowExceptionoe)Console.WriteLine(计算0的阶乘时引发溢出异常,num);Console.WriteLine(0,oe.Message);return;Console.WriteLine(0的阶乘是1,num,factorial);try-finally结构 n不管try子句是如何退出的,但程

35、序的控制权最后都会转移到finally子句执行。案例名称:使用案例名称:使用try-finally语句语句程序名称:程序名称:3-22.csusingSystem;publicclassSamplepublicstaticvoidMain()tryConsole.WriteLine(执行try子句!);gotoleave;/跳转到leave标签finallyConsole.WriteLine(执行finally子句!);leave:Console.WriteLine(执行leave标签!);try-catch-finally结构 ntry子句后跟一个或多个catch子句及一个finally子句

36、。案例名称:使用案例名称:使用try-catch-finally语句语句程序名称:程序名称:3-23.csusingSystem;classSamplepublicstaticvoidMain()trythrow(newArgumentNullException();/引发异常catch(ArgumentNullExceptione)Console.WriteLine(Exception:0,e.Message);finallyConsole.WriteLine(执行finally子句);3.5 C#面向对象程序设计基础 n面向对象编程的主要思想是将数据(数据成员)及处理这些数据的相应函数(函

37、数成员)封装到类中,并使用类的实例(类的实例称为对象)进行计算。n与传统的面向过程的编程方法相比,面向对象编程方法有以下优点:n程序的可维护性好;n对象可以多次使用,可重用性好。 类的定义 classAclassBvoidf()Aa=newA();n类具有封装性、继承性和多态性的特点。n类创建完后,使用new关键字可建立类的实例对象。n类的修饰符主要有访问修饰符、abstract、static、sealed、partial。n类的成员修饰符主要有访问修饰符、abstract、static、sealed、virtual、override、readonly、const 类的常识类或成员的访问修饰符

38、 npublic:访问不受限制,任何地方都可访问。ninternal:允许同一程序集中的应用程序可以访问。nprotected:在所属的类或派生类中能被访问。nprotected internal:允许同一程序集中的应用程序可以访问、所属类或派生类中能被访问。nprivate:在所属的类中能被访问。使用访问修饰符 案例名称:使用访问修饰符案例名称:使用访问修饰符 程序名称:程序名称:3-25.csusingSystem;classClass1publicstrings;/公有成员protectedinti;/保护成员privatedoubled;/私有成员publicvoidF1()s=Wel

39、comesix!;/正确,允许访问自身成员i=100;/正确,允许访问自身成员d=18.68;/正确,允许访问自身成员publicstaticvoidMain()Class1a=newClass1();a.s=six;Console.WriteLine(0,a.s); nabstract:修饰类的时候表示该类为抽象类,不能够创建该类的实例。修饰方法的时候表示该方法需要由子类来实现;含有抽象方法的类一定是抽象类。nstatic:修饰类时表示该类为静态类,该类不能被实例化,该类所有成员都为静态的;修饰类成员时,只能通过【类.成员名】的方式访问。nsealed:修饰类时表示该类不能够被继承,修饰方法

40、时表示该方法不能被覆写。npartial:可以将类的定义拆分到两个或多个源文件中。每个源文件包含定义的一部分,当编译应用程序时.NETFramework会将所有部分组合起来形成一个类。类或成员的其他修饰符nvirtual:修饰方法成员,表示虚方法。父类可以含有该类的实现,子类可以覆写该方法。noverride:表示该方法覆写了父类的方法。nreadonly:修饰字段,表示该字段为只读字段,是运行时只读,内容在运行时确定。 nconst:修饰字段,表示该字段为只读字段,且在编译时必须明确该字段的值。 类或成员的其他修饰符(续)类的属性 案例名称:使用属性案例名称:使用属性usingSystem;

41、classTimePeriodprivatedoubleseconds;publicdoubleHoursgetreturnseconds;setseconds=value*3600;classProgramstaticvoidMain()TimePeriodt=newTimePeriod();t.Hours=24;Console.WriteLine(共有+t.Hours+秒);使用继承使用继承n继承是使用已存在的类作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能。案例名称:使用继承案例名称:使用继承程序名称:程序名称:3-24.csusingSystem;cl

42、assBaseApublicvoidFuncA()System.Console.WriteLine(FuncitonA);classDerivedA:BaseApublicvoidFuncB()System.Console.WriteLine(FunctionB);classTesterpublicstaticvoidMain(stringargs)DerivedAaDerived=newDerivedA();aDerived.FuncA();aDerived.FuncB();构造函数和析构函数 n构造函数用于实现类的实例的初始化。每个类都有构造函数,即使没有声明它,编译器也会自动提供一个默认

43、的构造函数。n当创建一个对象的时候,自动调用构造函数,执行其中语句。n使用构造函数请注意以下几个问题:n一个类的构造函数通常与类名相同n构造函数不声明返回类型,也不能定义为voidn构造函数一般都是public类型,如果是private表明该类不能被实例化n析构函数当销毁这个类的时候调用,用来释放创建类所占有的资源。当对象脱离其作用域时(例如对象所在的 函数已调用完毕),系统自动调用析构函数。举例:构造函数和析构函数案例名称:构造函数和析构函数案例名称:构造函数和析构函数程序名称:程序名称:3-26.csusingSystem;classDesk/构造函数和类名一样,析构函数前面加public

44、Desk()Console.WriteLine(ConstructingDesk);weight=6;high=3;width=7;length=10;Console.WriteLine(0,1,2,3,weight,high,width,length);Desk()Console.WriteLine(DestructingDesk);protectedintweight;protectedinthigh;protectedintwidth;protectedintlength;publicstaticvoidMain()Deskaa=newDesk();Console.WriteLine(b

45、ackinmain();构造函数和继承n构造函数和析构函数不能被继承,只能被调用。案例名称:构造函数和继承案例名称:构造函数和继承usingSystem;classBaseClasspublicBaseClass(intx,inty)intresult=x+y;Console.WriteLine(基类构造函数中的内容:0+1=2,x,y,result);classDerivedClass:BaseClasspublicDerivedClass(intx,inty):base(x,y)intresult=x*y;Console.WriteLine(派生类构造函数中的内容:0*1=2,x,y,re

46、sult);classProgramstaticvoidMain(stringargs)DerivedClassdc=newDerivedClass(5,6);this关键字 nThis关键字仅局限在构造函数、类的方法中使用。n在类的构造函数中出现的this表示对正在构造的对象本身的引用;在类的方法中出现this表示对引用该方法的对象的引用。n在结构的构造函数中出现的this表示对正在构造的结构的引用;在结构的方法中出现this表示对调用该方法的结构的引用。n除此以外,其他的地方使用this关键字都是非法的。使用this关键字案例名称:使用案例名称:使用this关键字关键字 程序名称:程序名称

47、:3-27.csusingSystem;publicclassEmployeepublicstringname;/员工姓名publicdecimalsalary;/员工薪水/构造函数publicEmployee(stringname,decimalsalary)/用this关键字给正在构造的对象的name和salary赋值=name;this.salary=salary;/显示员工姓名及薪水publicvoidDisplayEmployee()Console.WriteLine(姓名:0,name);Console.WriteLine(薪水:0元,salary);/用this

48、方法将当前对象传给Tax.CalcTax()方法Console.WriteLine(个人所得税:0元,Tax.CalcTax(this);publicclassTaxpublicstaticdecimalCalcTax(EmployeeE)return(0.14m*(E.salary-800.0m);publicclassSamplepublicstaticvoidMain()/声明类Employee的实例eEmployeee=newEmployee(小刘,4123.6m);e.DisplayEmployee();/显示员工姓名和薪水关键字static n在类中声明变量和方法时,可使用stat

49、ic作为修饰符。static标记的变量由整个类共享,访问时直接使用类名加.。案例名称:使用案例名称:使用static关键字关键字 程序名称:程序名称:3-28.cs usingSystem;publicclassPersonprivateintid;publicstaticinttotal=0;publicPerson()total+;id=total;publicclassOtherClasspublicstaticvoidMain()Person.total=100;Console.WriteLine(Person.total);Personc=newPerson();Console.Wr

50、iteLine(Person.total);/c.tota?使用静态方法案例名称:使用静态方法案例名称:使用静态方法程序名称:程序名称:3-29.cs usingSystem;publicclassPersonprivateintid;privatestaticinttotal=0;publicstaticintgetTotalPerson()returntotal;publicPerson()total+;id=total;publicclassTestPersonpublicstaticvoidMain()Console.WriteLine(Person.getTotalPerson();

51、Personp1=newPerson();Console.WriteLine(Person.getTotalPerson();3.6 C#面向对象高级特性 n和其他的面向对象语言一样,C#支持多态、虚方法、函数的重载等。n除此之外,C#还提供一种特殊的数据形态“装箱” 多态(Polymorphism) n在C#中,多态性是指:“同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果 ” 。n例如,当从父类派生了很多子类时,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作可以表现出不同的操作结果。 实现多态案例名称:实现多态案例名称:实现多态us

52、ingSystem;interfaceAnimalSoundvoidSound();publicclassDog:AnimalSoundpublicvoidSound()Console.WriteLine(狗的叫声为:汪汪!);publicclassCat:AnimalSoundpublicvoidSound()Console.WriteLine(猫的叫声为:喵喵!);classStatrpublicvoidAnSound(AnimalSoundp)p.Sound();classProgramstaticvoidMain(stringargs)Statrsc=newStatr();Dogdc=

53、newDog();sc.AnSound(dc);Catcc=newCat();sc.AnSound(cc);虚方法 n类的方法前如果加上了virtual修饰符,则称之为虚方法。使用了virtual修饰符后,不允许再有static、abstract或override修饰符。n基类中定义的普通函数,在派生类中重新定义时需加new关键字;如果基类中定义的是虚函数,在派生类中重新定义时使用override关键字。案例名称:使用虚方法案例名称:使用虚方法程序名称:程序名称:3-30.cs usingSystem;classTeststaticvoidMain(stringargs)Baseb=newBa

54、se();b.Draw();Derivedd=newDerived();d.Draw();d.Fill();Base obj = new Derived();obj.Fill();obj.Draw();classBasepublicvoidFill()System.Console.WriteLine(Base.Fill);publicvirtualvoidDraw()System.Console.WriteLine(Base.Draw);classDerived:BasepublicoverridevoidDraw()System.Console.WriteLine(Derived.Draw)

55、;publicnewvoidFill()System.Console.WriteLine(Derived.Fill);使用虚方法 n“Base obj = new Derived(); ”定义了基类对象obj指向派生类的实例,当调用普通方法时,总是调用基类的方法,当调用虚方法时,则调用派生类的方法。n如果利用Base类继续派生出一些类,则“obj.Draw()”语句将会根据所给不同对象的实例调用不同的方法,从而实现多态性。n参见例polymorphism.cs抽象类 n抽象类使用abstract修饰符。抽象类不能直接实例化,只能被其他类继承。n抽象方法只能声明于抽象类中,且不包含任何实现,在继承类中必须对抽象类中的抽象方法进行重写,不然该派生类依然是抽象类。n抽象类用于部分实现一个类,再由用户按需求对其进行不同的扩展和完善。使用抽象类使用抽象类 案例名称:使用抽象类案例名称:使用抽象类 程序名称:程序名称:3-31.csusingSystem;abstractpublicclassWindowpublicWindow(inttop,intleft)this.top=top;this.left=left;Console.WriteLine(

温馨提示

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

评论

0/150

提交评论