程序设计基础教程_第1页
程序设计基础教程_第2页
程序设计基础教程_第3页
程序设计基础教程_第4页
程序设计基础教程_第5页
已阅读5页,还剩407页未读 继续免费阅读

下载本文档

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

文档简介

1、.C# 课件课件第一章第一章第二章第二章第三章第三章第四章第四章第五章第五章第六章第六章第七章第七章第八章第八章第九章第九章第十章第十章ACCP 4.0补充补充.NET 平台以及Visual Studio.NET IDE简介 第一章第一章.目标 讨论计算、Internet 和应用程序开发的转变 了解对 .NET 的需求 解释 CLR 和 IL 的角色 Visual Studio.NET IDE简介.集中式计算哑终端主机集中式计算.客户端/服务器计算客户端 - 服务器计算客户端:智能终端服务器PC数据大的话网络就不好了.分布式计算2-1分布式计算智能终端网络网络在本地分布式计算中,计算机通常位于

2、 LAN 中.分布式计算 2-2网络网络.计算方案的转变集中计算客户端 - 服务器计算分布式计算Internet.当前的 InternetWeb 服务器InternetWeb 服务器Web 服务器今天的今天的 Web 站点是独立的孤岛站点是独立的孤岛 Web 提供数据的提供数据的 HTML“图片图片”,而不是实际的数据而不是实际的数据 浏览器:变相的只读哑终端浏览器:变相的只读哑终端 结构与旧的分时模型相同结构与旧的分时模型相同 要进行个性化,需要在每个站点输要进行个性化,需要在每个站点输入相同的个人信息入相同的个人信息!.目前存在的难题家庭办公室联机信息其他信息脱机信息电子邮件需要个人个人信

3、息空间信息空间用户用户开发人员开发人员 生成、测试和部署站点的工具不足重用不好(c+写的vb再用) 站点通常较吸引人,但没什么用处需要创建应用程序并将其布署到多台设备的工具.Internet 的转变Web 服务器Web 服务器Web 服务器Web 服务器Web 服务器Web 服务器组合体组合体作为孤岛的作为孤岛的 Web 站点站点站点、服务和设备彼此协作,共同提供丰富的用户体验。.应用程序开发的演变Internet任何人在任何位置都可以使用应用程序软件作为服务提供资源丰富,基于应用程序资源丰富,基于应用程序来控制来控制 应用程序集成在本地系统服务中推向市场时间短更高的开发效率更高质量软件 应用

4、程序和网络上所有应用程序集成在一起,从而创造独特的价值 因此,可以将焦点集中在创建独特的商业价值,不必关注建造基础设施 应用程序(Web 服务)在Internet/Intranet 中公开其程序特点 开发者通过调用 Web API 将 Web 服务集成到应用程序中 Web 上的组件编程!.NET - 演变的结果2-1融合计算和通讯形成组合体,不再是孤岛!分布式计算-本地进行软件成为服务应用程序可由任何人在任何地方使用.NET -演变的结果 2-2融合计算和通讯形成组合体,而不是孤岛!分布式计算本地进行软件成为服务应用程序可以由任何人在任何地方使用.NET - 将 DC(个人计算) 向前推进了一

5、步2-1其他其他.NET 设备设备个人个人信息空间信息空间.用户数据存放在网络上 - 可以随时随地进行访问可以从任何 .NET 设备访问数据创建可以通过任何浏览器、任何设备访问的应用程序.NET 应用程序利用了 Internet 的功能.NET - 以 Internet 为中心的一种全新的平台.NET - 将 DC 向前推进了一步2-2.NET 所支持的语言C#VB.NETEiffelCOBOLSmallTalkADAPythonJScript.NETVC+.代码代码被执行被执行C+VB编译器编译器编译器编译器可执行可执行代码代码可执行可执行代码代码RUNTIMERUNTIME语言特定的编译器

6、和运行库.代码代码被执行被执行C#VB.net编译器编译器编译器编译器可执行可执行代码代码可执行可执行代码代码RUNTIMERUNTIMEIL+元数据CLRIL 和 CLR 的使用Common Language Runtime.执行 .NET 程序MSIL+元数据机器代码代码被执行CLR第一次编译第一次编译第二次编译第二次编译.NET 程序被编译两次,第一次编译很慢,而第二次编译较快!语言语言编译器编译器.NET 源代码.Microsoft 中间语言MSIL+元数据机器代码代码 被执行CLRMSIL帮助语言实现互操作IL 不是字节代码,但很接近字节代码。因此,执行应用程序时,IL 到机器码的转

7、换速度非常快!通过 CLR将 MSIL 转换为具体 CPU 的代码CPU 无关 的指令集语言语言编译器编译器.NET 源代码.公共语言运行库CLR.NET 源代码MSIL+元数据机器代码代码被执行管理内存易于设计组件和应用程序,其对象可以跨语言互动跨语言集成(特别是跨语言继承)一次编译,就可运行在支持运行库的任何 CPU 和操作系统上语言语言编译器编译器.VS.NET IDE帮助系统演示.VS.NET IDE设计器演示.VS.NET IDE窗口管理演示.总结 .NET 是以 Internet 为中心的一种全新的平台 通过 .NET,可以将用户数据存放在网络上,并且随时随地通过与 .NET 兼容

8、的任何设备访问这些数据 NET 独一无二的特征是可以提供多语言支持 以 .NET 语言编写的源代码将被编译两次,第一次由语言特定的编译器从源代码编译为 IL,第二次从 IL 编译为机器码.Microsoft.NET 平台组件 第二章.回顾 .NET 是以 Internet 为中心的一种全新平台 通过 .NET,可以将用户数据存放到网络上,随时随地通过与 .NET 兼容的任何设备访问该数据 .NET 独一无二的特征是提供多语言支持 以 .NET 语言编写的源代码被编译两次,一次由语言特定的编译器从源代码编译成 IL,第二次从 IL 编译成机器码.目标 描述 Microsoft.NET 的核心组件

9、 讨论 .NET 框架并列出其组件 谈论.NET优点.Microsoft.NET 的组件MS.NET产品和服务产品和服务第三方第三方 .NET 服务服务MS.NET平台平台VS.NETMSN.NETOffice.NETbCentral serverfor .NETWindows.NET.Net 基础结构基础结构和工具和工具.Net 用户体验用户体验.NET 生成生成块服务块服务.NET 设备软件设备软件一些有机会生产构建在一些有机会生产构建在 .NET 平平台上的服务的合作伙伴和开发人台上的服务的合作伙伴和开发人员员.Microsoft.Net 平台的功能Internet协议协议XMLInte

10、rnet协议XMLMicrosoft.NET构建在 XML 和 Internet 协议的基础之上用于开发新 一代软件的一套工具和服务集旨在使对 Internet 上的任何资源组进行集成/编排成为可能可以更快更容易地设计、实现和部署协作式 Web 解决方案.XMLInternet协议协议XMLMicrosoft.NET将实际数据与表现形式分开构建新一代 Internet 的关键;使得能够对信息进行整理、编程和编辑提供了一种将数据发布到多种设备的方法使站点能够进行协作并提供能够彼此交互的 Web 类型丰富、性能高不用类型转换、穿透防火墙服务组合体.SOAP 的功能Internet协议协议XMLMi

11、crosoft.NETMicrosoft.NET 构建在 HTTP 和 SOAP(简单对象访问协议)等现有协议上SOAP 是基于 XML/HTTP 的协议SOAP 允许以独立于平台的方式访问服务、对象和服务器SOAP 用于在分散的分布式环境中交换信息.Microsoft.NET 平台编排.NET框架框架.NETEnterprise Server.NET 生生成块服务成块服务Windows CE、Windows ME、Windows 2000 和和 Windows.NET.编排Windows (CE、 ME、 2000 和和.NET).NET框架框架 .NETEnterprise Server.

12、NET 生成生成块服务块服务.NET 平台构建在 Windows 2000 服务器系列的可伸缩性、可伸缩性、可靠性、可靠性、安全性安全性和可管理性可管理性基础之上选择 Windows 2000 系列.NET框架框架编排.NETEnterprise ServerWindows (CE、 ME、2000 和和 .NET).NET 生成生成块服务块服务Web服务服务WebUI数据和数据和 XML基类基类公共语言运行库Microsoft.NET 框架的组件.NETEnterpriseServer编排.NET框架框架Windows (CE、 ME、2000 和和 .NET).NET 生成生成块服务块服务

13、 通过服务器系列可以快速生成和管理一个集成的、支持 Web 的企业系统 可伸缩性设计 可以与最新的 Internet 和数据标准实现互操作安装 SQL Server 2000Internet Security & Acceleration (ISA) Server 2000Host Integration ServerExchange 2000 Server & Exchange 2000 Conferencing ServerCommerce Server 2000BizTalk Server 2000Application Server 20007 个核心个核心 .NET

14、Enterprise Server.NET Enterprise Server.NET 生成生成块服务块服务编排.NET框架框架.NETEnterprise ServerWindows(CE、 ME、2000 和和 .NET)由 Microsoft 和其他 ASP (应用程序提供)提供的商业 Web 服务这些服务可以在其他应用程序 / Web 服务中使用核心.NET 生成块服务;通知个性化日历动态提供.NET 生成块服务.业务进程Web 服务组织 A组织 B 在组织内部以及在组织之间 多个客户、合作伙伴和服务提供商场所进程和 Web 服务运行在编排.NET框架框架.NETEnterprise

15、Server.NET 生成生成块服务块服务Windows(CE、 ME、2000 和和 .NET)BizTalk Server 2000 为此编排服务提供这些工具。业务进程.NET框架作用 提供一个一致的面向对象的编程环境 提供一个将软件部署和版本控制冲突最小化的代码执行环境 提供一个保证代码安全执行的代码执行环境 提供一个可消除脚本环境或解释环境的性能问题的代码执行环境 使开发人员的经验在面对类型大不相同的应用程序时保持一致 按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成.NET Framework体系结构W i n d o w s公 共 语

16、言 运 行 库基 类 库A D O . N E TA S P . N E T公 共 语 言 规 范C #Visual Studio.NETV BC + +. . .W i n d o w s 窗 体X M LC O M + 服 务.NET Framework 核心组件 公共语言运行库 .NET Framework 类库 基类库 扩展类库.Microsoft. NET Framework 的体系结构操作系统公共语言运行时 (CLR).Net Framework 类库 (FCL).NET Framework 的组件基本框架类.Net Framework.Net Framework 类库类库ASP.

17、NETCLSCLRCTS.公共语言运行库 公共语言运行库是建立在操作系统之上 公共语言运行库作用 管理内存 线程执行 代码执行 代码安全验证 编译以及其他系统服务.托管代码定义 以运行库为目标的代码称为托管代码 C+分成两种,一种是托管C+,另外一种是非托管C+ C#是以运行库为目标设计的,因此用C#编写的代码基本上为托管代码 不以运行库为目标的代码称为非托管代码 .NET提供了与非托管代码互操作的服务,比如与COM互操作的Interop服务.NET Framework框架类库 .NET Framework 类库提供一组丰富的接口以及抽象类和具体(非抽象)类 可以按原样使用这些具体的类,或者在

18、多数情况下从这些类派生自己的类 若要使用接口的功能,既可以创建实现接口的类,也可以从某个实现接口的 .NET Framework 类中派生类.公共语言规范(CLS) 公共语言规范 (CLS)是许多应用程序所需的一套基本语言功能 CLS 规则定义了通用类型系统的子集 CLS 通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言互用性 大多数由 .NET Framework 类库中的类型定义的成员都符合 CLS.使用VS.NET进行.NET应用开发 Windows应用程序开发 ASP.NET应用程序开发 移动设备应用程序开发 Web Services 构建.NET分布式系统.NET

19、特点总结4-1统一的API 传统的编程模式 VB、VC、Delphi采用不同的编程模式和编程API Windows编程和Web编程采用不同的编程模式 .NET编程模式 将所有的API组织在框架类库中,VB.NET,C#,VC.NET可以调用相同的API实现相同功能 ASP.NET Web窗体编程模式类似于VB的Web窗体设计器.NET特点总结4-2自动内存管理 传统内存管理模式 开发者可以操纵内存,为内存管理提高了灵活性,同时也降低了安全性、稳定性 COM中采用引用计数的方法实现内存管理,但是容易出现循环引用的问题 .NET内存管理模式 由.NET Framework CLR实现内存分配 由.

20、NET Framework CLR实现垃圾收集和垃圾回收.NET特点总结4-3安全类型系统 在.NET框架中不会有不安全的类型表 不会产生某一个类型的指针指向另外一个类型的情况 不可能有无初始化的变量,不可能索引超出边界的数组等等.NET特点总结4-4 安全意外处理 零安装(自我描述) 更好的版本控制 多语言支持 与COM的互操作性 XML Web Service.总结 .NET 是以 Internet 为中心的一种应用程序开发平台。 此平台的主要优点在于用户可以随时随地使用与 .NET 兼容的设备访问所有重要数据。 Microsoft.NET 主要由三个组件构成,即 Microsoft.NE

21、T 产品和服务、.NET 平台本身以及第三方 .NET 服务。 .NET 平台构成了独立于语言,可以从各种.NET 兼容设备上运行的应用程序的基础。 .NET 平台基于两种核心技术,即 XML 和 Internet 协议套件。.C# 基础知识第三章第三章.回顾 第二章 - - Microsoft .NET 的组件 .NET 是以是以 Internet 为中心的一种应用程序开发平台为中心的一种应用程序开发平台。 此平台的主要优点在于用户可以随时随地使用与此平台的主要优点在于用户可以随时随地使用与 .NET 兼容兼容的设备访问所有的重要数据的设备访问所有的重要数据。 Microsoft.NET 主

22、要由三个组件组成主要由三个组件组成,即即 Microsoft.NET 产产品和服务品和服务、.NET 平台本身以及第三方平台本身以及第三方 .NET 服务服务。 .NET 平台构成了独立于语言平台构成了独立于语言,可以从各种可以从各种 .NET 兼容设备兼容设备上运行的应用程序的基础。上运行的应用程序的基础。 .NET 平台基于两种核心技术平台基于两种核心技术,即即 XML 和和 Internet 协议套协议套件。件。.目标 讨论 C# 中的类 讨论C#程序中的流程控制 阐释 C# 中的基本数据类型 讨论 装箱和取消装箱的概念 讨论结构 讨论枚举类型 使用C#编写简单程序.Microsoft

23、.NET开发 Windows 应用程序和 Web 应用程序的新平台支持超过 20 种语言为 Windows 编程的可用功能带来了变革.C# 简介充分利用了 .NET 平台C#编译器是.NET 家族中最高效的编译器C+ 的最新换代产品通过强制脚本类型检查,提高了开发人员的工作效率并增强了安全性允许有限制地使用本机指针.C# 程序流一个简单的 C# 程序 -本程序将显示消息本程序将显示消息: :这是这是HelloWorld程序程序.C# 编程构造3-1C# 中的变量以下列方式进行声明: AccessModifier DataType VariablePublicPrivateProtectedin

24、tstringfloat.C#编程构造3-2 如果需要使用任何关键字作为变量名称,必须为该变量名称添加前缀 本程序的输出消息本程序的输出消息: :string是一个关键字但在本例用作一个变是一个关键字但在本例用作一个变量名量名.C# 编程构造3-3using System;class Test static void Main() int array1 = new int5; Console.WriteLine(10 * array12); 本示例本示例的输出的输出结果是结果是0.默认值 常用数据类型的默认值:.C# 中的输入/输出3-1使用 System 命名空间中的 Console 类的方

25、法最常用的方法 Console.ReadLine( ) Console.WriteLine( ).C# 中的输入/输出 3-2using System;class TestDefaultValues static void Main() int number, result; number=5; result=100 * number; Console.WriteLine(“当当 100 与数字与数字 0 相乘时,结果为相乘时,结果为 1 , number, result); 突出显示的代码行起着占位符的作用,即指定变量结果突出显示的代码行起着占位符的作用,即指定变量结果值的显示位置值的显示位

26、置。 index,alignment:formatString)可选整数,指示包含格式化值的区域的最小宽度。如果格式化值的长度小于对齐,则用空格填充该区域。如果对齐为负,则格式化的值将在该区域中左对齐;如果为正,则格式化的值将右对齐。如果没有指定对齐,则该区域的长度为格式化值的长度。如果指定对齐,则需用逗号分隔。G常规,E 或 F 中较短的F浮点数,常规表示法E用 E 表示法表示的浮点数(其中,E 代表 10 的次幂) N带有分隔符的浮点数(在美国为逗号)C货币,带有货币符号和分隔符(在美国为逗号)D十进制数,仅用于整型X十六进制数,仅用于整型.C# 中的输入/输出 3-3示例接受了一行的用户

27、输入示例接受了一行的用户输入, ,并将其回显为输出并将其回显为输出.if 结构2-1用于执行条件分支语法 表达式需要始终为 Boolean 类型的表达式.If结构2-2上面的代码段将显示错误消息上面的代码段将显示错误消息 错误错误 CS0029:无法将类型无法将类型“string”隐式转换为类型隐式转换为类型“bool”.switch 语句2-1 语法 -每个每个case分支必须有一个分支必须有一个break语句语句.switch 语句2-2Switch结构结构可以充当多个可以充当多个if语句语句.循环结构当特定条件为 true 时执行一组特定的指令,或将特定指令组执行一定次数循环结构的类型

28、- while 循环循环 do 循环循环 for 循环循环 foreach 循环循环.while 循环while 循环执行一组语句,直至指定条件为 falsebreak 语句 - 随时跳出循环continue 语句 - 跳过当前循环,并开始下一循环.do 循环语法 -在条件检查之前在条件检查之前, ,循环体中的语句组至少执行一次循环体中的语句组至少执行一次.for 循环语法 -int sum=1;for(count=0;count10;count+) sum+;forfor语句循环语句循环1010次次,sum的的最终结果是的的最终结果是1010。.foreach 循环2-1foreach 循环

29、用于通过集合或数组来循环语法 -.foreach 循环 2-2using System;public class ForEachLoop static void Main(String args) int index; String array1=new String3; for(index=0;index3;index+) array1index=argsindex; foreach(String strName in array1) Console.WriteLine(strName); .C# 中的构造函数C# 中的构造函数与类同名class MyConstructorExpublic

30、MyConstructorEx()/MyConstructorEx 构造函数.C# 中的析构函数 C# 中的析构函数与类也同名class MyConstructorEx public MyConstructorEx() /MyConstructorEx 构造函数 public MyConstructorEx() /MyConstructorEx 析构函数 .C# 的基本类型2-1C# 的数据类型分为两种基本类型 值类型值类型int、char 和结构和结构 引用类型引用类型类、接口、数组和字符串类、接口、数组和字符串.C# 的基本类型2-2 值类型 仅在内存中保存值 存储与堆栈中 引用类型 将对

31、象的地址存储与堆中 null表示没有应用任何对象 .值类型variableVal是值类型是值类型输出结果为输出结果为100100,而不而不是是200200.引用类型using System;class DataTypeTest public int variableVal;class DataTypeTestRef static void Main() DataTypeTest dataTest = new DataTypeTest(); dataTest.variableVal = 100; funcDataTypeTest(dataTest); Console.WriteLine(data

32、Test.variableVal); static void funcDataTypeTest(DataTypeTest dataTest) int tempVar=10; dataTest.variableVal = tempVar*20; .值类型和引用类型值引用变量保存实际值引用存储位置内联(堆栈)堆默认值零Null传递给函数的参数值的副本引用的副本.装箱和取消装箱装箱是从值类型到引用类型的转换取消装箱是从引用类型到值类型的转换示例.C# 中的数据类型处理C# 提供了一种“统一类型系统” C# 中所有数据类型都是从一个类即 object 类派生而来的.静态成员成员不与任何特定的对象或类关

33、联仅可以有一个实例static int staticMem;static int instanceCount()/instanceCount 实现.数组一组具有类似数据类型的值属于引用类型,因此存储于堆中C# 中的数组声明语法如下 DataTypenumber of elements ArrayName;int6 array1;.结构结构属于值类型可以有方法可以拥有构造函数不能实现继承struct structEx public int structDataMember; public void structEx() /构造函数实现 public void structMethod1() /s

34、tructMethod1 实现 .枚举类型2-1public class Holiday public enum WeekDays Monday,Tuesday,Wednesday,Thursday,Friday public void GetWeekDays(String EmpName, WeekDays DayOff) /处理处理 WeekDays static void Main() Holiday myHoliday = new Holiday(); myHoliday.GetWeekDays(Richie, Holiday.WeekDays.Wednesday); 程序中声明了仅接

35、受程序中声明了仅接受5 5个值的枚举类型个值的枚举类型WeekDays.枚举类型2-2C# 中的枚举数都有与值相关联的数字默认情况下,枚举数的第一个元素被指定为 0 值,后续的各个枚举数元素的值依次递增默认值可以在初始化阶段中重写.编译和运行步骤 1 - 在记事本中输入代码步骤 2 - 使用 .cs 扩展名保存文件步骤 3 - 切换至 DOS 提示符,再输入以下命令要运行 C# 文件,可以键入不带扩展名的文件名csc csc First.cs .总结在 C# 中,数据类型分为两种基本类型,即值类型和引用类型。装箱是指从值类型到引用类型的转换,而取消装箱是指从引用类型到值类型的转换。C# 中的结

36、构内部可以定义方法,也可以拥有构造函数。枚举类型是声明一组命名常数的独特类型。.在 C# 中实现 OOP 概念第四章第四章.作业点评 变量没初始化 结构的构造函数没有指定参数 String string 引用(字符串)String是固定不变的,在进行字符串连接的时候是新建一个字符串,进行连接后,最后赋值,如果对String赋值多次,就会在内存中保存多个这个对象的副本,浪费系统资源 Csc 静态 其它例子.回顾 第三章C#基础 C#变量的声明方式如下变量的声明方式如下: AccessModifier DataType VariableName; 在在C#中,数据类型分为两种基本类型,即中,数据类

37、型分为两种基本类型,即值类型和引用类型。值类型和引用类型。 装箱是指从值类型到引用类型的转换,而装箱是指从值类型到引用类型的转换,而取消装箱是指从引用类型到值类型的转换。取消装箱是指从引用类型到值类型的转换。 C#的结构内部可以定义方法,也可以拥有的结构内部可以定义方法,也可以拥有构造函数。构造函数。.目标 在C#中使用构造函数 在C#中使用析构函数 解释垃圾回收器的工作原理 讨论方法重载 讨论操作符重载 在C#中使用继承 讨论C#中的重写.C# 中的构造函数3-1是类中的特殊类型的方法是每次创建对象时要调用的函数通常用于初始化与类同名不返回值.构造函数3-2using System;publ

38、ic class DaysInYear private int days; public DaysInYear() days = 365; static void Main(String args) DaysInYear newDaysInYear=new DaysInYear(); Console.WriteLine(newDaysInYear.days); 无构造函数输出无构造函数输出的结果是的结果是0 0有构造函数输出有构造函数输出结果是结果是365365.带参数的构造函数3-3public class DaysInYear private int days; public DaysIn

39、Year() days = 365; public DaysInYear(int day) days = day; public DaysInYear(String dayOne) days =Convert.ToInt32(dayOne); public void setDay(int newDays) days = newDays; 传递不同个数的参数传递不同个数的参数 传递个数相同但类型传递个数相同但类型不同的参数不同的参数.C# 中的析构函数由C#中的垃圾回收器调用垃圾回收器通过销毁不再需要或不再被引用的对象来释放内存语法 DaysInYear()/ 析构函数实现析构函数实现不能对结构

40、使用析构函数。只能对类使用析构函数。一个类只能有一个析构函数。无法继承或重载析构函数。无法调用析构函数。它们是被自动调用的。析构函数既没有修饰符,也没有参数。.垃圾回收器3-1垃圾回收器的工作原理 如果为定义析构函数的对象分配了内存,运行如果为定义析构函数的对象分配了内存,运行库将库将把该对象添加到需要销毁的对象的列表中。把该对象添加到需要销毁的对象的列表中。 垃圾回收垃圾回收器定期检查器定期检查有没有不再被引用的对象有没有不再被引用的对象 如果如果找到了找到了其名称没有列在销毁器列表中的对其名称没有列在销毁器列表中的对象,就立即清除该对象。象,就立即清除该对象。 完成垃圾回收后完成垃圾回收后

41、,将调用销毁器线程,该线程调将调用销毁器线程,该线程调用有标记为用有标记为“准备销毁准备销毁”的对象的销毁方法的对象的销毁方法(析构函数)。(析构函数)。.垃圾回收器3-2对象销毁过程发生后,就将该对象从需要销毁的对象列表中删除。因为该对象没有被引用,也没有列在销毁器列表中,所以下次进行垃圾回收时就会将它清除。.垃圾回收器3-3有析构函数的对象占用的资源较多,因为即使不再需要它们,它们仍会在内存中驻留较长时间。销毁过程作为独立的线程执行,该线程会占用大量资源。GC.Collect ()强制进行垃圾回收。强制进行垃圾回收。 .方法重载重载方法有两种方式 指指定不同个数的参数定不同个数的参数 指定

42、指定不同类型的参数不同类型的参数.不同参数个数的方法重载using System;public class Area private int areaVal; public void AreaCal(int radius) areaVal = (22/7)* radius*radius; public void AreaCal(int length, int breadth) areaVal = length*breadth; public void AreaCal(int length, int breadth, int height) areaVal = length*breadth*he

43、ight; 参数的类型相同参数的类型相同参数个数不同参数个数不同.不同参数类型的方法重载. public void AreaCal(int radius) areaVal = (22/7)* radius*radius;public void AreaCal(string shapeName) Console.WriteLine(0 的面积没有计算的面积没有计算,shapeName);. 方法中参数个数相等方法中参数个数相等, ,参数类型不同参数类型不同.操作符重载3-1 重载操作符意味着使该操作符具有不同的行为 使用操作符可以使方程式简单易懂/ 第 1 行int result = Decim

44、al.Add(54, 200);/ 第 2 行int result2 = 54 + 200;上述两行执行同样的操作上述两行执行同样的操作, ,但操作符更简便易懂但操作符更简便易懂.操作符重载3-2以下是可以重载的操作符列表public static public static result-typeresult-type operator operator unary-operatorunary-operator ( ( op-typeop-type operand ) ) public static public static result-typeresult-type operator

45、operator binary-binary-operatoroperator ( ( op-type operand, , op-type2 operand2 ) ) .操作符重载3-3using System;public struct Distance public Distance(int lon, int mag) this.longitude = lon;this.latitude = mag; int longitude, latitude; public static Distance operator - (Distance first, Distance second) r

46、eturn new Distance(first.longitude - second.longitude, first.latitude - second.latitude); / 主函数主函数 public static void Main() Distance start = new Distance();Distance newDistance = new Distance();Distance finish = new Distance();start.longitude = 12;start.latitude = 10;finish.longitude = 2;finish.lat

47、itude = 1;newDistance = start - finish;Console.WriteLine(终点的位置在起点以东 0 度,以北 1 度。, newDistance.longitude,newDistance.latitude); .C# 中的继承2-1将新类作为另一个类的后代来声明和使用避免重复编写代码提供代码重用的巨大好处.C# 中的继承2-2有两种继承类型 单一继承单一继承 多重继承多重继承 C#只支持单一继承,不支持多重继承只支持单一继承,不支持多重继承.单一继承using System;class CharacterVal public int setCharVa

48、l(char ch) char charVal=ch; Console.WriteLine(输入的字符是输入的字符是:0,charVal); return(0); class StringVal : CharacterVal public string strVal; public int setStrVal(string str) strVal=str; Console.WriteLine(输入的字符串是输入的字符串是:0,strVal); return(0); class Inheritance static void Main() StringVal object1 = new Stri

49、ngVal(); Object1.setCharVal(j); Object1.setStrVal(enjoy); 类类StringVal继承继承CharacterVal因此可以直接引用方法因此可以直接引用方法setCharVal.密封类 如果不需要类被继承则应当密封该类sealed class classOne / 类的实现通过指定通过指定sealed关键字,可以密封任何类关键字,可以密封任何类.方法重写2-1重写基类中现有方法的步骤: 在继承类中声明同名的新方法 在该方法名前附加new关键字 .方法重写2-2using System;class IntAddition public voi

50、d add() int firstNum=1; int secondNum=2; Console.WriteLine(两数之和是:两数之和是:0, firstNum+secondNum); class StringAddition : IntAddition new public void add() string firstStr=a; string secondStr=b; Console.WriteLine(两字符串之和是两字符串之和是:0, firstStr+secondStr); class MethodOverride public static void Main() Strin

51、gAddition objStringAddition = new StringAddition(); objStringAddition.add(); 在在StringAddition类中基类中类中基类中add方法被重载方法被重载.总结2-1 带参数的构造函数是接受参数的构造函数 在 C# 中,析构函数由垃圾回收器调用。 在 C#中,有两种方式来重载方法 指定不同个数的参数 指定不同类型的参数 C#允许重载操作符 .总结2-2 重载操作符意味着使操作符(例如,加法操作符 +)在应用于结构或类的某些对象时具有不同的行为 C# 不支持多重继承 要重写基类的现有方法,需要在继承类中声明一个同名的新

52、方法,并在方法名称前附加 new 关键字.C# 中的高级 OOP 概念第五章第五章.回顾 第四章 - 实现C中的高级OOP概念 带带参数的构造函数是指接受参数的构造函参数的构造函数是指接受参数的构造函数。数。 在 C#中,析构函数由垃圾回收器调用。中,析构函数由垃圾回收器调用。 在在C#中允许方法重载中允许方法重载 在在C#中允许操作符重载中允许操作符重载 C#不支持多重继续不支持多重继续 要要重写基类的现有方法,需要在继承类中重写基类的现有方法,需要在继承类中声明一个同名的新方法,并在方法名称前声明一个同名的新方法,并在方法名称前附加附加 new关键字关键字 .目标 讨论多态性 使用虚函数

53、讨论抽象基类 讨论接口的概念 使用接口.C# 中的多态性6-1 多态性和虚函数关系非常密切 多态性允许在运行时实现派生类的方法 需要从基类的对象调用派生类方法时,可以使用虚函数public class ShapeObj public virtual void area() System.Console.WriteLine(这是一个虚这是一个虚 Area 方法方法); .C# 中的多态性6-2.C# 中的多态性6-3public class Circle : ShapeObj public override void area() System.Console.WriteLine(这是这是 Ci

54、rcle 的的 Area() 方法方法); public class Rectangle : ShapeObj public override void area() System.Console.WriteLine(这是这是 Rectangle 的的 Area() 方法方法); public class Square : ShapeObj public override void area() System.Console.WriteLine(这是这是 Square 的的 Area() 方法方法); 定义了三个类(定义了三个类(RectangleRectangle、Circle Circle

55、 和和 SquareSquare)。)。这些类是从这些类是从 ShapeObj ShapeObj 类派生的,类派生的,并且重写了并且重写了ShapeObj ShapeObj 类的类的 area() area() 方法。方法。override override 关键字用于重写基类函数关键字用于重写基类函数 area()area()。.C# 中的多态性6-4public class PolymorphismExp public static void main() ShapeObj objArray = new ShapeObj4; objArray0 = new ShapeObj(); objA

56、rray1 = new Rectangle(); objArray2 = new Circle(); objArray3 = new Square(); foreach (ShapeObj iterateArray in objArray) iterateArray.area(); 每个派生自每个派生自 ShapeObj ShapeObj 的类的的类的 area()area()方法都被方法都被调用调用 .C# 中的多态性6-5class SecondExp public int firstMethod() return(secondMethod()*thirdMethod(); public

57、virtual int secondMethod() return(10); public int thirdMethod() return(20); class DerivedClass : SecondExp public override int secondMethod() return(30); class TestPublic static void main() DerivedClass objDerived = new DerivedClass();System.Console.WriteLine(objDerived.firstMethod(); 在在DerivedClass

58、DerivedClass中重写基类中中重写基类中的虚函数的虚函数secondMethod()secondMethod().C# 中的多态性6-6 多态性是智能重写 多态性 - 在运行时决定调用哪个方法 多态性需要虚函数,而虚函数则需要进行方法重写.抽象基类2-1 抽象基类是可以被继承的类 不能创建抽象类的对象 C#允许在类定义中添加abstract修饰符来创建抽象基类。 可以有实现的方法.抽象基类2-2using System;abstract class BaseClass public abstract void abstractFunc(); public void nonAbstrac

59、tFunc() Console.WriteLine(这是这是 nonAbractFunc() 方法!方法!); class DerivedClass : BaseClass public override void abstractFunc() Console.WriteLine(这是这是 abstractFunc() 方法!方法!); class Test static void main() DerivedClass objDerived = new DerivedClass(); BaseClass objBase = objDerived; objBase.abstractFunc()

60、; objDerived.nonAbstractFunc(); 在派生类在派生类DerivedClassDerivedClass中重写抽象基类的抽象中重写抽象基类的抽象方法方法abstractFunc()abstractFunc().接口4-1 接口相当于纯抽象基类 它只能包含抽象方法,而不能包含任何方法实现 实现特定接口的类必须实现该接口列出的成员 只能有方法 属性 索引的声明 只能是public internal 方法声明不能有访问修饰符.public interface IFile int delFile(); void disFile();.接口4-2public class MyFile : IFi

温馨提示

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

评论

0/150

提交评论