



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《面向对象程序设计(C#)》
讲义刘直良信息工程学院1、学时分配・总学时:72学时,其中理论学时36,实验学时36。2、成绩与考核成绩=平时成绩+实验成绩+考试成绩考核方式:上机考试3、课程讲授时顺序与教材不同,请同学们注意查找对应章节。4、学习方法:多做多练,借助于网络资源,适当做一些系统的大型实例。5、.NETMSDN(MicrosoftDeveloperNetwork),这是微软的技术开发手册,是开发人员不可缺少的技术资料,其网址为:/zh-cn/1ibrary/default,aspx6、C#高级编程(第6版)/art/200811/98922.htm第1章 ,NET与C#.NET和C#1.1什么是•NET定义根据微软的定义:.NETisa"/revolutionarynewplatform,builtonopenInternetprotocolsandstandards,withtoolsandservicesthatmeldcomputingandcommunicationsinnewways"".即:.NET=新平台+标准协议+统ー开发工具.NET技术是微软公司推出的ー个全新概念,“它代表了一个集合、ー个环境和一个可以作为平台支持下一代!nternet的可编程结构。”.NET的最终目标就是让用户在任何地方、任何时间,以及利用任何设备都能访问所需的信息、文件和程序。.NET的构成.NET开发平台=.NETFrameWork+.NETDevelopmentTools>.NETFramework(框架)是整个开发平台的基础,包括CommonLanguageRun(CLR:公共语言运行库)和.NETClassLibrary(类库)。(1)公共语言运行库是.NET的基础,用户可以将公共语言运行库看作是…个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理)。(2).NET类库是ー个综合性的面向对象的可重用类集合。当用C#编写的程序要在其它没有安装.net的机器上运行时,必须安装.NET框架,否则不能运行,所以.net编写的程序的可移植性稍差。2、.NET开发工具包括VisualStudio.NET集成开发环境和.NET编程语言。其中,VisualStudio.NET集成开发环境用来开发和测试应用程序。.NET编程语言包括VisualBasic,VisualC++和新的VisualC#等用来创建运行在公共语言运行库(CLR)上的应用程序。VBVC-n-JC#|JScrip| 公共语言运行规范(CommonLanguageSpecification)Asp.NET(B/S)Windows窗体(C/S)I ADO.NET和XML I基类库(BaseClassLibrary)
公共语言运行库(CommonLanguageRun)IWindows COM+Services.NET开发平台1.2什么是C#C#读作CSharp,是C和C++语言家族中第一一种面向组件的编程语言,是一种使用简单、面向对象、类型安全的现代编程语言。作为Microsoft的下一代面向对象的语言,能够让开发人员在.NET平台上快速地建立大量的应用程序。按照Microsoft给出的定义,C#是ー种源自于C和C++的,简单的、现代的、面向对象的和类型安全的程序设计语言,它结合了VB的灵活性和C语言的强大的功能,是新一代的编程语言。C#为程序员提供了开发飞速发展的Web应用程序所需要的强大而灵活的功能。与C++相比,C#将更容易被人们理解和接受,未来大量.NET平台的应用将由C#开发,C#将是未来开发企业级分布式应用程序的首选。1.2C#程序结构介绍创建第一个C#控制台(或称命令行)程序程序代码如下:〃源文件:welcome,csusingSystem;classWelcome(staticvoidMainOConsole.WriteLine(z,WelcomeyoutoentertheC#world!z,);.2.2代码及结构分析1、上面的代码你可以在任意ー种字处理软件中进行编写,或在.NET集成开发环境(IntegratedDeveloperEnvironment,IDE)中直接编写,然后以文件名“Welcome,cs”存盘。典型的C#源文件都是以“.cs”作为文件的扩展名的。2、名字空间usingSystem表示导入名字空间,等同于C或C++中的“#include“。“System”就是ー个名字空间,是Microsoft.NET系统提供的类库,“using”指令允许对属于该名字空间成员的类型无限制引用。3、类和类的方法在程序第二行,classWelcome声明了一个类,类的名字叫做“Weicome”。这个程序让我们所作的事情都依靠它来完成。在ー个C#程序中,至少要包含ー个类。StaticvoidMain()表示类“Welcome”中的ー一个方法,方法总是为我们完成某项工作的。在C#中,程序的执行总是从“Main〇”方法开始,ー个程序中不允许出现两个或者两个以上的“Main()”方法。Main。函数在C#里非常特殊,它是编译器规定的所有可执行程序的入口点,Main。函数名的第•个字母要大写,否则将不具有入口点的语义。就像ー个文件夹可以容纳多个文件一样,ー个名字空间可以被视为某些类的ー个容器。因为.NET有很多类,所以名字空间是必要的。微软已经编写了数以千计的基类,同时任何合理的大型应用程序都可以定义更多的类。通过把类放入名字空间可以把相关的类组织起来,并且可以避免命名冲突。4、“{”和“}”与C和C++ー样,源代码被包含在ー对大括号之中,每ー个右括号总是和它前面离它最近的ー个左括号相配套。如果左括号和右括号没有全部的配套,那么这就是・个错误的程序。所有语句都以分号”;”结束。5、程序的输入与输出程序所完成的输入输出功能都是通过“Console”来完成的,“Console”是在名字空间“System”中已经定义好的・个类,你根本不需要管它是怎么完成工作的,只要直接使用它就可以了。上面的程序代码中,类“Console”为我们展现了一个最基本的方法:WriteLine»用于在输出设备中输出,还有一个较常用的方法是ReadLine。Console.ReadLine表示接受输入设备输入。6.添加注释C#中注释的方式和C、C++没有什么区别,每行中双斜杠“〃’’后面的内容,以及在分割符"/*''和“*/''之间的内容都将被编译器忽略。其中,‘ソ/''表示进行单行注释;“/*”和“*/”表示多行注释。注:在C#中添加注释与解除注释时,可利用工具栏上的按钮。7、标识符C#中的标识符有以下规则:(1)以字母或下划线开头,后面可以是字母、数字或下划线。(2)严格区分大小写(3)关键字也可以作为标识符,但要在关键字前加上@符号。1.2.3.NET集成开发环境的使用技巧1、利用.NET集成开发环境的优越性ーー智能提示。2、显示行号:工具/选项一文本编辑器ーC#,选中“行号”3、设置断点:4、注释/取消注释5、排版1.2.4程序的编译命令行编译对C祥源程序,默认扩展名为.CS,可使用记事本或.NET环境编辑得到。在使用命令行编译时,使用的编译器是:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe下面以编译file,cs为例:1、编译file,cs生成file,exe:escfile,cs2、编译file,cs生成file,dll:esc/target:libraryfile,cs3、仅编译file,cs,但不生成可执行文件:esc/nooutputfile,cs4,编译file,cs生成my.exe:esc/out:my.exefile,cs一般经过编译后得到ーexe文件,但要注意,此时产生的exe文件是ー个由中间语言(IL:IntermediateLanguage)>元数据(Metadata)和一个额外的被编译器添加的目标平台的标准可执行文件头组成的PE(portableexecutable,可移植执行体)文件,而不是传统的二进制可执行文件,我们称之为受管代码(ManagedCode),这些代码不专用于任何ー种操作系统,在执行时,通过即时编译器JIT(Just-In-Time)编译成原始的可执行代码。利用菜单编译并执行程序利用“调试”菜单。§1.3控制台输入输出操作控制台(Console)的输入输出操作主要是通过命名空间System中的类Console来实现的。输入操作主要有Read方法和ReadLine方法,输出操作主要有Write方法和WriteLine方法。1.3.1Console.WriteLine方法功能:将信息输出到控制台,输出信息后换行。格式:Console.WriteLine(express)说明:在该方法中,可以采用{N[,M]:格式化字符串}}的形式格式化输出字符串,其中各参数含义如下:{}:用来在输出字符串中插入表达式的值。N:表示输出表达式的序号,从〇开始,必须连续,当为〇时,表示输出第ー个表达式的值。M:输出表达式的值所占的列数。格式化字符串:指定数据按某种格式输出。如E为按科学计数法格式输出,X为按十六进制输出等。有如下儿种:Gー常规,E或F中较短的Fー浮点数,常规表示法Eー用E表示法表示的浮点数(其中,E代表10的次累)Nー带有分隔符的浮点数(在美国为逗号)Cー货币,带有货币符号和分隔符(在美国为逗号)D一十进制数,仅用于整型X一十六进制数,仅用于整型1.3.2Console.Write方法功能:将数据到控制台,但不产生换行。其余同Console.WriteLine方法。1.3.3Console.ReadLine方法功能:用来从控制台读取一行字符,遇到回车键结束,若没有任何输入则返回nullo3.4Console.Read方法功能:用来从控制台读取ー个字符,并返回其对应的整数值,遇到回车键返回,若没有任何输入则返回T。1.4创建第一个Windows应用程序4.1Windows桌面开发环境(IDE)Windows窗体设计器Windows窗体设计器是进行用户界面设计的主要工具。当创建一个新的Windows应用程序时,会产生一个空白窗体。当我们双击窗体中的任何ー个位置,便会弹出代码设计器。工具箱工具箱包含.net开发人员可以使用的所有控件集:1、可以使用其右上角的大头针将其固定。2、若不小心关闭了工具箱,可以选择“视图/工具箱”将其重新打开。3、向窗体中添加控件时,可以单某控件,再在窗体中按住鼠标拖动画出控件对象,也可双击控件,在窗体中生成。4、右击工具箱,可进行工具箱的其它设置。服务器资源管理器服务器资源管理器是VisualStudio.NET的服务器管理控制台。使用服务器资源管理器打开数据连接,登录服务器,浏览它们的数据库和系统服务。可以将节点从服务器资源管理器拖放到VisualStudio.NET设计器上。这将创建新的数据组件,这些组件预配置为引用所拖放的项。解决方案资源管理器解决方案资源管理器提供项目及其文件的有组织的视图,并且提供对项目和文件相关命令的便捷访问。若要访问解决方案资源管理器,请在“视图”菜单上选择“解决方案资源管理器”。属性窗ロ属性窗ロ显示当前选中控件的属性及事件等信息,用户可以通过此窗口进行控件状态的设置及事件的设计等。当然也可通过代码进行。.4.2Windows应用程序举例例1:利用标签控件显示“欢迎进入C#编程世界!”。在设计时应该以下儿个问题:(1)创建一个新项目时,我们可以创建多种类型的项目,因此一定要正确选择相应的项目类型。(2)创建一个新项目时,一定要注意新项目的保存位置,默认位置是“C:\DocumentsandSettings\Administrator\MyDocuments\VisualStudio2005”,如果不想保存在该文件夹下,则需设置目标文件夹。(3)创建一个新项目时,系统会在相应的位置创建一个新文件夹,和相应的文件。(4)当创建新对象时,对象名称构成一般如下:对象类型标志+对象实际名称例2:图片浏览器§1.5创建第一个WEB应用程序演示,以后有后续课程,在此不详细讲解。第2章C#编程基础§2.1变量与常量相信你应该对变量和常量的概念再熟悉不过了,有关变量和常量的知识都是任何・门编程语言的基础知识,而每ー门编程语言都有自己相对应的变量和常量的命名规则和使用方式。2.1.1变量使用变量的一条重要的原则:变量必须先定义后使用,其声明方式同C++。静态变量:带有“static”修饰符声明的变量称为静态变量。一旦静态变量所属的类被装载,直到包含该类的程序运行结束时它将一•直存在。静态变量就是该变量类型的默认值。静态变量最好是在定义时便赋值。如statica=10;非静态变量:不带有“static”修饰符声明的变量称其为实例变量。如inta;类中的非静态变量,一旦ー个类的新的实例被创建,直到该实例不再被应用从而所在空间被释放为止,该非静态变量将一直存在。同样鉴于定义赋值检查,ー个类的非静态变量也应该是在初始化的时候赋值。注:静态变量与非静态变量的区别:静态变量只需分配一次,且只能通过数“类名.变量名”的格式进行访问。而实例变量则随着对象的创建而被创建,且只能通过“对象名.变量名”的方式进行访问。例:usingSystem;classStaticTest(publicstaticintstal=10;publicinta2=10;)classStaticExample(publicstaticvoidMainO(StaticTesta,b;a=newStaticTest();b=newStaticTest();StaticTest.stal=StaticTest.stal+10;a2+=10;StaticTest.stal=StaticTest.stal+10;a2+=10;Console.WriteLine(*StaticTest.stal={0},a.a2={1}”,StaticTest.stal,a.a2);Console.WriteLine(*StaticTest.stal={0},b.a2={l}*,StaticTest.stal,b.a2);})分析此程序中各变量的变化情况。局部变量:局部变量是指在ー个独立的程序块中,,个for语句、switch语句或者using语句中声明的变量,它只在该范围内有效。当程序运行到这个范围内时,该变量即开始生效,程序离开时变量失效。与其他几种变量类型不同的是,局部变量不会自动被初始化,所以也就是没有默认值。在进行赋值检查时,局部变量被认为没有被赋值。在局部变量的有效范围内,在变量的定义以前就使用是不合法的,如果对局部变量超出了其作用范围,也是不合法的。如下面的代码:for(intI=0;K10;I++)Iintnum=a;〃这是非法的,因为局部变量a还没有被定义inta;intb=a;)Num=10;〃其访问超出了其作用范围2.1.2常量所谓常量就是其值固定不变的量。从数据类型来讲,常量的类型可以是任何ー种值类型或者是引用类型。ー个常量的声明,就是声明程序中要用到的常量的名称和它的值,与变量一样,我们可以同时声明一个或者多个给定类型的常量。常量声明的格式如下:[修饰符]const类型常量名=常量值其中:常量修饰符可以是:new、public、protected、internal>private。常量的类型必须是下面中的ー种:sbyte、byte、short、ushort>int>uint>ulong>char>float、double>decimaRbool、string或是引用类型(reference-type)。如:publicconstdoubleX=l.0,Y=2.0,Z=3.0;一般地,为了和变量想区别,常量用大写字母表示
§2.2数据类型c#支持两种主要类型,即值类型和引用类型。值类型可以分为:简单类型、结构类型、枚举类型;引用类型有四种:类、代表、数组和接口。VisualC整NET的数据类型图2.1值类型简单类型简单类型是直接由一・系列元素构成的数据类型。这些简单类型可分为:整数类型、布尔类型、字符类型和实数类型。(1)整数类型整数类型的变量的值为整数。C#中有九种整数类型:短字节型(sbyte),字节型(byte)、短整型(short),无符号短整型(ushort)、整型(int)、无符号整型(uint)、长整型(long)、无符号长整型(ulong)C#类型.NETFramework类型描述表示范围sbyteSystem.Sbyte8-bit有符号整数类型-128―127byteSystem.Byte8-bit无符号整数类型〇〜255shortSystem.Intl616位有符号整数-32768〜32767□shortSystem.Uintl616位无符号整数〇〜65535intSystem.Int3232-bit有符号整数类型-2147483648〜2147483647uintSystem.Uint3232-bit无符号整数类型〇〜4294967295longSystem.Int6464-bit有符号整数类型-9223372036854775805〜9223372036854775807ulongSystem.Uint6464-bit无符号整数类型〇〜18446744073709551615(2)实数类型浮点类型:数学中的实数不仅包括整数,而且包括小数。小数在C#中采用单精度(floaい和双精度(double)。它们的差别在于取值范围和精度不同。十进制类型(decimal):是C#专门为我们定义的ー种高精度的数据类型,主要用于方便我们在金融和货币方面的计算。其范围小于浮点型,但精度比浮点型高,在数据的后面加上“m”,表示该数据是十进制类型。类型.NETFramework类型精度大致范围floatSystem.Single(32位)7位±1.5x10-45-3.4xIO38doubleSystem,double(64位)15〜16位±5.Ox1032,1.7x1030SdecimalSystem.Decimal(128位)28~29位士1.0x10-28±7.9x1028(3)字符类型(char型)除了数字以外,计算机还需要处理的信息主要就是字符了。字符包括数字字符、英文字符、表达符号等,C#提供的字符类型采用了国际公认的Unicode字符集标准。ー个Unicode的标准字符长度为16位,用它可以表示大多数的字符类型了。注意:对字符常数,必须用单引号括起,且里面只能有・•个字符。另外,我们还可以直接通过十六进制转义符(前缀'x)或Unicode表示法给字符型变量赋值)(前缀\u),用来在程序中指代特殊的控制字符。常用字符转义符字符集\a响铃\n换行符\r回车符\t制表符\\\ヽ’ヾ注意:在C井中“ヽ”般作为转义字符使用,若不想作为转义字符使用,则在字符串前使用符号在字如:strings=@"c:\aaa"。(4)布尔类型(bool型)布尔类型是用来表示一个事件或状态的“真"和“假’我们知道,不管任何数据,在计算机的内部都是采用二进制方式处理和存储。布尔类型表示的逻辑变量只有两种取值:“真‘'或“假'在C#中分别采用“true”和“false”表示。注意:在C#中布尔类型与整型数据间不能进行转换。值类型常量后缀:后缀限定的数据类型uuint或ulong1long或ulongul或luulongffloatddoublemdecimal结构类型在具体的程序设计中我们经常要把一组相关的信息存放在ー起。把一系列相关的变量组织成为ー个单ー实体的过程,称为生成结构的过程。这个单ー实体的类型我们就叫做结构类型,每ー个变量称为结构的成员。结构类型的变量采用struct来进行声明。下面的程序代码说明定义ー个通讯录记录结构(包括姓名、电话和地址)的定义。usingSystem;usingSystem.Runtime.InteropServices;namespaceConso1eApp1ication4(structPhoneBook|publicstringname;publicstringphone;publicstringaddress;}classClassistaticvoidMain(string[]args)PhoneBookpl;=“张三”;pl.phone=”681500〇”;pl.address="黑龙江ハー农垦大学”;Console.WriteLine("姓名:{0}电话:⑴家庭住址:{2}",,pl.phone,pl.address);}))pl就是ー个通讯录(PhoneBook)结构类型的变量。上面声明中的“public”表示对结构类型的成员的访问权限。对结构成员的访问通过结构变量名加上访问符".”号,后跟成员的名称:="tom";结构类型包含的成员类型没有限制,可以相同也可不同。值得注意的是:结构与类有很多相似之处,它可以声明构造器、常量、域、方法、属性、索引、操作符和嵌套类型等,但也有区别。如下:(1)结构是值类型,而类是引用类型(2)类可以被继承,但结构不能被继承(3)结构无析构函数。枚举类型枚举(enum)是值类型的ー种特殊形式,它从System.Enum继承而来,并为基础基元类型的值提供替代名称,实际上是为ー组在逻辑上密不可分的整数值提供便于记忆的符号。枚举类型有名称、基础类型和一组字段。基础类型必须是ー个内置的有符号(或无符号)整数类型(如Byte,Int32或UInt64)o字段是静态文本字段,其中的每ー个字段都表示常数。同一个值可以分配给多个字段。下面的程序代码声明了一个代表星期的枚举类型的变量。EnumWeekDay{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};WeekDayday;注意:枚举类型的变量在某一时刻只能取枚举中某ー个元素的值。如,day这个表示“星期”的枚举的变量,它的值要么是Sunday,要么是Monday或其他的星期元素,但它在ー个时刻只能代表具体的某一天,不能既是星期二,又是星期・〇Day=Tuseday;按照系统默认,枚举中的每个元素都是整型(int),且第一个元素的默认值为0,枚举值可以是不连续值,但它后面的每一个连续的元素的值总是在前一个元素值的基础上按加1递增。在枚举中,也可以给元素直接赋值。下面的程序代码把星期一的值设为1,其后的元素的值分别为2,3……usingSystem;classClassi(enumWeekDay{Sunday,Monday=10,Tuesday,Wednesday,Friday,Saturday};staticvoidMain(string[]args){Console.WriteLine(*{0},{1}*,WeekDay.Sunday,(int)WeekDay.Sunday);Console.WriteLine(*{0},{1}*,WeekDay.Monday,(int)WeekDay.Monday);Console.WriteLine(*{0},{1}*,WeekDay.Wednesday,(int)WeekDay.Wednesday);))为枚举类型的元素所赋值的值的类型限于long、int、short和byte等整数类型。可空类型可空类型是System.Nullable结构的实例。可空类型可以表示其基础值类型正常范围内的值,再加上一个null值。例如,Nullable<Int32>,读作“可空的Int32",可以被赋值为ー2147483648到2147483647之间的任意值,也可以被赋值为null值。可空类型可通过下面两种方式中的ー种声明:System.Nullable<T>variableー或ーT?variable例:int?k;k=null;k=100;Console.WriteLine(k);可空类型的每个实例都具有两个公共的只读属性:HasValue和Value,通过HasValue属性可以判断该实例是否为空,通过Value属性可取出该实例的值。2.2.2引用类型在这里,引用的含义是该类型的变量不直接存储所包含的值,而是指向它所要存储的值。即引用类型存储实际数据的引用值的地址。值类型内存分配在堆栈中,而引用类型,实际内存则分配在堆中,但在堆栈中创建一个引用变量,其值为堆中实际引用的地址。C#中的引用类型有四种:类、代表、数组和接口。usingSystem;classClassi{publicintvalue=0;}classTest(publicstaticvoidMain(){intvall=0;intval2=vall; 〃值类型,内存分配在堆栈中val2=123;Classirefl=newClassi(); 〃引用类型,内存分配在堆中Classiref2=newClassi();ref2=ref1;ref2.value=123;Console.WriteLine(*values:{0},{1}”,vail,val2);Console.WriteLine("references:{0},{1}",refl.value,ref2.value);堆栈堆堆栈堆类类是面向对象编程的基本单位,是ー种包含数据成员、函数成员和嵌套类型的数据结构。类的数据成员有常量、域和事件。函数成员包括方法、属性、索引指示器、运算符等。类和结构同样都包含了自己的成员,但它们之间最主要的区别在于:类是引用类型,而结构是值类型。类支持继承机制,通过继承,派生类可以扩展基类的数据成员和函数成员,进而达到代码重用和设计重用的目的。下面介绍两个经常用到的类:object类:它是所有其他类型的基类,C#中的所有类型都直接或是间接地从object类中继承。因此,对ー个。bject的变量可以赋予任何类型的值。Intx=25;objectobjl;objl=x;objectobj2='A';对object类型的变量声明采用object关键字,这个关键字是在•NET平台中为我们提供的预定义的名字空间System中定义的,是类System.Object的别名。String类:称为字符串类型,专门用于对字符串的操作,字符串必须用
括起。同样,这个类也是在.NET平台中为我们提供的预定义的名字空间System
中定义的,是类System.String的别名。字符串在实际中应用非常的广泛,在类的定义中封装了许多内部的操作,我们只要简单地加以利用就可以了。可以用加号"+”合并两个字符串,采用下标从字符串中获取字符等。StringStringl="Welcome";stringString2="Welcome''+"everyone";charc=Stringl[〇];〃可以使用数组的方式去访问其中的每ー个字符boolb=(Stringl==String2);代表(委托)在C#中取消了C和C++中的指针的这个概念。而代表(委托)实际上相当于是C#中的函数指针原型,与指针不同的是,代表在C#中是类型安全的。数组在进行批量处理数据的时候,我们要用到数组。数组是ー组类型相同的有序数据。数组按照数组名、数据元素的类型和维数来进行描述。C#中提供Ststem.Array类是所有数组类型的基类。接口接口定义了一个协议(conrtact)。ー个类或结构要实现接口就必须坚持这种协议。接口可以包括方法、属性、索引和事件作为成员。下面的程序代码说明了一个接口,它包含一个索引、ー个事件E、一"个方法F和一个属性P。2.3隐式类型ーーVAR类型VAR是3.5新出的ー个定义变量的类型,其实也就是弱化类型的定义,VAR可代替任何类型(可变类型),编译器会根据上下文来判断你到底是想用什么类型。至于什么情况下用到VAR 我想就是你无法确定自己将用的是什么类型时就可以使用VAR类型,类似OBJECT但是效率比OBJECT高。使用var定义变量时有以下四个特点:必须在定义时初始化。也就是必须是vars="abed”形式,而不能是如下形式:vars;s="abed";•但初始化完成,就不能再给变量赋与初始化值类型不同的值了。var要求是局部变量。使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全ー样。2.2.4类型转换不同的数据类型在・定条件下是可以相互转换的,转换的方法有:隐式转换隐式转换即由系统进行的转换。能进行隐式转换的数据类型下表。类型可以隐式转换成的数据类型boolobjectbytedecimal,double,float,int,uint,long,ulong,object,short,ushortsbytedecimal,double,float,int,long,object,shortchardecimal,double,float,int,uint,long,ulong,object,ushortdecimalobjectdoubleobjectfloatdouble,objectintdecimal,double,float,long,objectuintdecimal,double,float,long,ulong,objectlongdecimal,double,float,objectalongdecimal,double,float,objectshortdecimal,double,float,int,long,objectushortdecimal,double,float,int,uint,long,ulong,objectusingSystem;classClassi{staticvoidMain(string[]args)(inti=10;bytej=20;shortk=34;〃若shortk=I;则出现错误,不能进行隐式转换inta=j;floatb二i;doublec=k;Console.WriteLine(*a={0}»b={l},c={2}*,a,b,c);))显示转换格式:(类型标识符)表达式显式转换即由用户进行强行转换。能进行显式转换的数据类型参见MSDN。例:(int)10.24;Doublex=10.6;Shorty=(short)x使用Convert类进行转换该类用于将一个基本数据类型转换为另一个基本数据类型。其常用方法如下表:ToBase64CharArray将8位无符号整数数组子集的值转换为等效的由以64为基的数字组成的Unicode字符数组子集。参数将子集指定为输入和输出数组的偏移量和输入数组中的元素数。ToBase64String将8位无符号整数数组的值转换为它的等效String表示形式(由以64为基的数字组成)。ToBoolean将指定的值转换为等效的布尔值。ToByte将指定的值转换为8位无符号整数。ToChar将指定的值转换为Unicode字符。ToDateTime将指定的值转换为DateTime,ToDecimal将指定值转换为Decimal数字。ToDouble将指定的值转换为双精度浮点数字。Tolntl6将指定的值转换为16位有符号整数。Tolnt32将指定的值转换为32位有符号整数。Tolnt64将指定的值转换为64位有符号整数。ToSByte将指定的值转换为8位有符号整数。ToSingle将指定的值转换为单精度浮点数字。ToString将指定值转换为其等效的String表示形式。ToUIntl6将指定的值转换为16位无符号整数。ToUInt32将指定的值转换为32位无符号整数。ToUInt64将指定的值转换为64位无符号整数。使用Parse方法进行转换格式:type.Parse(stringtype)功能:将数字的字符串表示形式转换为它的等效的数值型数据。例: strings="123";intx=int.Parse(s);doubley=double.Parse(Console.ReadLineO);使用ToString()方法进行转换当我们将其它类型的数据转换为string型时,可以使用object类的ToStringO方法。此方法经常使用,必须记住。格式:数据.ToStringO;例:doublexx=10.89;boolyy=true;Console.WriteLine(*123*+xx.ToStringO+yy.ToStringO);2.2.5装箱和拆箱在面向对象的编程语言中,我们通常使用的是对象。但为了提高速度,C#也提供了简单数据类型。因此,C#程序既包含一大堆的对象,又有大量的值。在这种环境下,让这两者协同工作始终是ー个不可回避的问题,你必须要有一种让引用和值进行通信的方法。在C#以及.NET运行时环境中,这个“通信”问题通过装箱(Boxing)和拆箱(Unboxing)解决。装箱是ーー种让值类型看起来象引用类型的处理过程。当ー个值类型(简单数据类型)被用于ー个要求或者可以使用对象的场合时,装箱操作自动进行。装箱ー个value-type值的步骤包括:分配ー个对象实例,然后把value-type值复制到对象实例。拆箱所执行的动作与装箱相反,它把ー个引用类型转换成值类型。拆箱操作的步骤包括:首先检查并确认对象实例确实是给定value-type的ー个经过包装的值,然后从对象实例复制出值。因此我们也可认为装箱和拆箱是值类型和引用类型的转换。装箱在进行装箱转换时,有隐式转换和显示转换两种例:隐式转换intinti=123;object〇=inti; //Boxing例:显式转换intinti=123;objecto=(object)inti; //Boxing在娱t 在地上・ルInti=123;o (格j翊)If ►intobjecto=l; 1拆箱例:intinti=123;objecto=(object)inti; //Boxingintk=(int)o //Unboxing例:
//boxing,cs//BoxinganintegervariableusingSystem;classTestBoxing{publicstaticvoidMainO(inti=123; 〃装箱objecto=i;//Implicitboxingi=456; //Changethecontentsofiintj=(int)o;〃拆箱Console.WriteLine(,zThevalue-typevalue={0}",i);Console.WriteLine("Theobject-typevalue={〇ナ,o);Console.WriteLine("Thevalue-typevalue={0}",j);}在堆板上 在堆上123Int1=123;objecto=l;(将Int1=123;objecto=l;(将i却)「123 1intj=(int)〇:§2.3运算符和表达式2.3.1运算符运算符及其优先级优先级种类操作符1初级的(x)X.yf(x)a[x]x++x--newtypeofsizeofcheckedunchecked2一元的+-! ++x—x(T)x3乘法的*/%4加法的4--5移位«»6关系的<><=>=is7相等的=f二8逻辑与&9逻辑异或当且仅当表达式的ー边为真时オ为真10逻辑或111条件与&&12条件或II13条件的?:14赋值=*=/=%=+=-=«=»=&=へ=1=说明:1、new:用于创建对象和调用构造函数,例如:ClassiMyClass=newClassi();也用于为值类型调用默认的构造函数,例如:intmylnt=newint();2、typeof:用于获得某ー类型的System.Type类型。3、sizeof:获得值类型数据在内存中占用的字节数,仅适用于unsafe模式,在程序编译时也使用/unsafe选项。usingSystem;classSizeClass(unsafestaticvoidMain()(Console,WriteLine("Thesizeofshortis{0}.",sizeof(double));Console.WriteLine("Thesizeofintis{0}.",sizeof(int));Console.WriteLine("Thesizeoflongis{0}.,sizeof(long));})4、checked/unchecked:用于控制整型算术运算和转换的溢出检查/忽略。usingSystem;classClassi{staticvoidMain(string[]args)(shortx,y;x=32767;y=32767;shortz=unchecked((short)(x+y));〃此处溢出Console.WriteLine("z={0}",z);}}若在溢出位置使用checked运算符,结果又如何呢?5、is:用于检查对象的运行时引用类型是否与给定类型兼容usingSystem;classClassistaticvoidMainOintk=10;boolz=kisint;Console.WriteLine(*z={0}",z);)I6、对相等及不相等的判断:(参见教材22页)(1)对于预定义的值类型,如果操作数的值相等,则==返回真,否则,返回假。(2)对于除string以外的引用类型,如果两个操作数引用相同的对象,则==返回真。对于string类型,将比较字符串的值。例:usingSystem;classClassi{staticvoidMain(string[]args)(stringsi="123";strings2="123";objectrl=newobject();objectr2=newobject();rl=10;r2=rl;Console.WriteLine(sl==s2);Console.WriteLine(rl==r2);r2=10;Console.WriteLine(rl==r2);}}(3)也可使用Equals方法判断两个数据是否相等。对值类型,只要两数据有相同的值便相等,对引用类型,如果两数据引用了相同的对象或具有相同的值便相等,否则不相等。例:usingSystem;classClassi{staticvoidMain(string[]args)(stringsl="123";strings2="123";objectrl=newobject();objectr2=newobject();rl=10;r2=rl;Console.WriteLine(sl.Equals(s2)); //trueConsole.WriteLine(rl.Equals(r2)); //trueobjectr3=newobject();r3=10;Console.WriteLine(rl.Equals(r3));//true})(4)若要判断两个引用类型是否引用了同一个对象,则可使用object.referenceEquals方法进行判断。例:usingSystem;classClassi{staticvoidMain(string[]args)(objectrl=newobject();objectr2=newobject();rl=10;r2=rl;Console.WriteLine(Object.ReferenceEquals(rl,r2));r2=10;Console.WriteLine(Object.ReferenceEquals(rl,r2));}}7、赋值运算符及条件运算符为右结合,其余的为左结合运算。运算符举例ヽusingSystem;classClassi(staticvoidMain()(intiresult,irem;doubledresult,drem;iresult=10/4;irem=10%4;dresult=10.0/4.0;drem=10.0%4.0;Console.WriteLine(*{0},{1},iresult,irem);Console.WriteLine("{0},{1}”,dresult,drem);)usingSystem;classClassi(staticvoidMain(){intx=2;inty=x++;Console.WriteLine("y二{0}",y);y=++x;Console.WriteLine("y=(0)",y);))usingSystem;classClassi(staticvoidMainO(inta=2;intb=3;Console.WriteLine(a&b);Console.WriteLine(ab);Console.WriteLine(ab);Console.WriteLine(a>>b);Console.WriteLine(a<<b);Console.WriteLine(a=b);Console.WriteLine(a!=b);)}3.2常用类及结构String类String类提供字符串的常用操作,其常用成员如下:公共属性Chars获取此实例中位于指定字符位置的字符。实际上一个String型数据相当于ー个char型数组,因此可以使用s[i]的格式访问其中的每一个元素。
Length获取此实例中的字符数。公共方法Copy创建一个与指定的String具有相同值的String的新实例。CopyTo将指定数目的字符从此实例中的指定位置复制到Unicode字符数组中的指定位置。Equals已重写。确定两个String对象是否具有相同的值。Format将指定的String中的每个格式项替换为相应对象的值的文本等效项。IndexOf报告String在此实例中的第一个匹配项的索引或ー个或多个字符的索引。Insert在此实例中的指定索引位置插入一个指定的String实例。LastIndexOf报告指定的Unicode字符或String在此实例中的最后ー个匹配项的索引位置。Remove从此实例中的指定位置开始删除指定数目的字符。Replace将此实例中的指定Unicode字符或String的所有匹配项替换为其他指定的Unicode字符或StringoSubstring从此实例检索子字符串。ToLower返回此String的小写形式的副本。ToString已重写。将此实例的值转换为StringoToUpper返回此String的大写形式的副本。Trim移除此实例的开始位置和末尾空格。TrimEnd移除此实例的结尾空格。TrimStart移除此实例的开始位置空格Format方法:格式化输出信息,利用string类中的Format方法可以将输出信息格式化,并返回…字符串。其一般格式为:string.Format(格式控制,参数列表)其中格式格式同Console.WriteLine方法中的格式控制。strings=string.Format("格式控制:s={0}",123);Console.Write!Jne(s);System.Math类常用的数学方面的方法请参考:System.Math类,此类中的方法多为静态方
法。为三角函数、对数函数和其他通用数学函数提供常数和静态方法。公共字段E表示自然对数的底,它由常数e指定。PI表示圆周和其直径的比率,它由常数K指定。公共方法Abs已重载。返回指定数字的绝对值。Acos返回余弦值为指定数字的角度。Asin返回正弦值为指定数字的角度。Atan返回正切值为指定数字的角度。Atan2返回正切值为两个指定数字的商的角度。BigMul生成两个32位数字的完整乘积。Ceiling返回大于或等于指定数字的最小整数。Cos返回指定角度的余弦值。Cosh返回指定角度的双曲余弦值。DivRem已重载。返回两个数字的商,并将余数作为输出参数进行传递。Exp返回e的指定次累。Floor返回小于或等于指定数字的最大整数。1EEERemainder返回一指定数字被另一指定数字相除的余数。Log一重载。返回指定数字的对数。Log10返回指定数字以10为底的对数。Max已重裁。返回两个指定数字中较大的一个。Min已重载。返回两个数字中较小的ー个。Pow返回指定数字的指定次裏。Round已重载。返回最接近指定值的数字。Sign已重载。返回表示数字符号的值。Sin返回指定角度的正弦值。Sinh返回指定角度的双曲正弦值。Sqrt返回指定数字的平方根。Tan返回指定角度的正切值。Tanh返回指定角度的双曲正切值。
DateTime结构(参见12.4)该结构通常用于表示日期和时间类型的数据。其常用成员如下:常用属性名称说明Date获取此实例的日期部分。Day获取此实例所表示的日期为该月中的第几天。DayOfWeek获取此实例所表示的日期是星期几。DayOfYear获取此实例所表示的日期是该年中的第几天。Hour获取此实例所表示日期的小时部分。Millisecond获取此实例所表示H期的毫秒部分。Minute获取此实例所表示日期的分钟部分。Month获取此实例所表示日期的月份部分。Now获取ー个DateTime对象,该对象设置为此计算机上的当前H期和时I,hJ,表示为本地时间。Second获取此实例所表示日期的秒部分。Ticks获取表示此实例的H期和时间的刻度数。TimeOfDay获取此实例的当天的时间。Today获取当前日期。Year获取此实例所表示日期的年份部分。常用方法名称说明Add将指定的TimeSpan的值加到此实例的值上。AddDays将指定的天数加到此实例的值上。Addllours将指定的小时数加到此实例的值上。AddMilliseconds将指定的亳秒数加到此实例的值上。AddMinutes将指定的分钟数加到此实例的值上。AddMonths将指定的月份数加到此实例的值上。AddSeconds将指定的秒数加到此实例的值上。AddTicks将指定的刻度数加到此实例的值上。AddYears将指定的年份数加到此实例的值上。DaysInMonth返回指定年和月中的天数。Parse已重载。将日期和时间的指定字符串表示转换成其等效的DateTimeoToLongTimeString将此实例的值转换为其等效的长时间字符串表示形式。ToShortDateString将此实例的值转换为其等效的短日期字符串表示形式。ToShortTimeString将此实例的值转换为其等效的短时间字符串表示形式。ToString已重载。已重写。将此实例的值转换为其等效的字符串表不〇§2.4结构化程序设计4.1语句类型语句块格式:{语句块}空语句格式:;标签语句格式:标识符:语句声明语句变量声明语句:格式:类型变量名匸初始值][一..];常量声明语句:格式:const类型常量名=常量值[,…];表达式语句格式:表达式;如:intx=l;X++;2.4.2三大结构选择语句.1if语句格式:if(布尔表达式)语句[else语句].2switch语句格式:switch(表达式)(Case[常量表达式:语句;break;][default:语句;break;])注意:在C#中,语句后若无goto语句,则必须使用break语句。循环语句.1while语句和dowhile语句格式:while(布尔表达式)语句:do语句while(布尔表达式);.2for语句格式:for([初始化语句];[布尔表达式];[重复语句])语句;foreach语句格式:foreach(类型变量in集合)语句说明:该语句仅用于对集合中的数据进行只读访问。例:usingSystem;classmyclass(staticvoidMain()(int[]x={1,2,3,4,5,6,7,8};foreach(intiinx)Console.WriteLine(i);}.4其余语句Goto:无条件跳转语句Break:结束当前循环的语句Continue:结束当次循环的语句练习:1、求1+2+…+100的和。2、通过键盘输入三角形的三边,若能构成三角形,则求其面积。3、输入ー组正整数,以〇为结束标志,并求其最大值、最小值及其和。§2.5数组数组类型属于引用类型,它由抽象类System.Array派生而来。5.1ー维数组数组声明格式:类型口数组名=new类型名[长度]类型口数组名;数组名=new类型名[长度];数组初始化数组初始化是指在定义时直接给数组赋初值。格式如下:类型口数组名={初值列表};或类型口数组名=new类型名口{初值列表}〃此时口内可不指定长度,若要指定长度,必须与初值列表的值的个数一致。2.5.2二维数组格式:类型[,]数组名=new类型名[长度1,长度2]或:类型[,]数组名;数组名=new类型名[长度1I长度2]2.5.3交错数组(参差数组)交错数组是元素为数组的数组。交错数组元素的维度和大小可以不同。交错数组有时称为“数组的数组“。其声明格式如下:类型口口数组名=new类型[长度]口在交错数组中,每一行又是ー个ー维数组,所以长度可以不等,在使用时可对每一行再单独定义。主要用于处理可变长的数据集合。例如:输出杨辉三角答案:2.5.4System.Array类提供创建、操作、搜索和排序数组的方法,因而在公共语言运行库中用作所有数组的基类。
公共属性Length获得一个32位整数,该整数表示Array的所有维数中元素的总数。LongLength获得・个64位整数,该整数表示Array的所有维数中元素的总数。Rank获取Array维数公共方法BinarySearch已重载。使用二进制搜索算法在ー维的排序Array中搜索值。Clear将Array中的ー系列元素设置为零、false或空引用(VisualBasic中为Nothing),具体取决于元素类型。Copy已重载。将一个Array的一部分复制到另ー个Array中,并根据需要执行强制类型转换和装箱。Createlnstance已重载。初始化Array类的新实例。GetLength获取一个32位整数,该整数表示Array的指定维中的元素数。GetLongLength获取ー个64位整数,该整数表示Array的指定维中的元素数。GetLowerBound获取Array中指定维度的下限。GetType获取当前实例的Type。GetUpperBound获取Array的指定维度的上限。GetValue已重载。获取当前Array中指定元素的值。索引指定为一个32位整数数组。IndexOf已重裁。返回ー维Array或部分Array中某个值第一个匹配项的索引。Initialize通过调用值类型的默认构造函数,初始化值类型Array的每ー个元素。LastIndexOf」重载。返回ー维Array或部分Array中某个值的最后一个匹配项的索引。Reverse已重载。反转ー维Array或部分Array中元素的顺序。SetValue已重载。将当前Array中的指定元素设置为指定值。Sort已重载。对一维Array对象中的元素进行排序。ToString返回表示当前Object的Stringo例:usingSystem;classClassiint[]myarray=newint[20];staticvoidMainOClassimy=newClassi();Randomr=newRandom();for(inti=0;i<=my.myarray.Length-1;i++)my.myarray.SetValue(r.Next(200,500),i);printarray(my.myarray);Array.Sort(my.myarray);printarray(my.myarray);strings=Console.ReadLineO;intelment=Convert.Tolnt32(s);intposition=Array.BinarySearch(my.myarray,elment)+1;Console.WriteLine("thepositionis{0}",position);)staticvoidprintarray(int[]ma)(foreach(intiinma)Console.Write("{0,4)*,i);Console.WriteLine();}§2.6集合(自学)集合类是System.Collections名空间中的数据结构,它们提供了为C#程序管理数据的各种方法,它们能够代替数组以便更灵活地管理对象组。ー些较流行的集合是用于管理动态地可调整大小的数组、表、队列和堆栈的数据。类说明ArrayList大小可按需动态增加的数组。BitArray管理位值的压缩数组,该值表示为布尔值,其中true表示位是打开的(1).false表示位是关闭的(0)。Hashtable表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。Queue表示对象的先进先出集合。SortedList表示键/值对的集合,这些键和值按键排序并可按照键和索引访问。Stack表示对象的简单的后进先出集合。2.6.1ArrayList集合ArrayList集合主要是使用大小可按需动态增加的数组实现IList接口,但它与数组的主要区别有:(1)数组中的数据必须是同类型,而ArrayList集合中的数据可以是不同类
型的数据。(2)数组的大小是固定的,而ArrayList集合是可以是动态的成倍增长的。公共构造函数ArrayList构造函数己重载。初始化ArrayList类的新实例。公共属性Capacity获取或设置ArrayList可包含的元素数。Count获取ArrayList中实际包含的元素数。IsFixedSize获取ー个值,该值指示ArrayList是否具有固定大小。IsReadonly获取ー个值,该值指示ArrayList是否为只读。公共方法Add将对象添加到ArrayList的结尾处。BinarySearch已重我。使用对分检索算法在已排序的ArrayList或它的一部分中查找特定元素。Clear从ArrayList中移除所有元素。Contains确定某个元素是否在ArrayList中。CopyTo已重载。将ArrayList或它的一部分复制到ー维数组中。Equals已重载。确定两个Object实例是否相等。FixedSize己軍我。返回具有固定大小的列表包装,其中的元素允许修改,但不允许添加或移除。GetEnumerator已重载。返回可循环访问ArrayList的枚举数。GetRange返回ArrayList,它表示源ArrayList中元素的子集。IndexOf已重载。返回ArrayList或它的一部分中某个值的第一个匹配项的从零开始的索引。Insert将元素插入ArrayList的指定索引处。InsertRange将集合中的某个元素插入ArrayList的指定索引处。LastIndexOf已重載。返回ArrayList或它的一部分中某个值的最后一个匹配项的从零开始的索引。Readonly已重载。返回只读的列表包装。Remove从ArrayList中移除特定对象的第一个匹配项。RemoveAt移除ArrayList的指定索引处的元素。RemoveRange从ArrayList中移除一定范围的元素。Reverse」重载。将ArrayList或它的一部分中元素的顺序反转。SetRange将集合中的元素复制到ArrayList中一定范围的元素上。Sort已重载。对ArrayList或它的一部分中的元素进行排序。ToArray己重载。将ArrayList的元素复制到新数组中。ToString返回表示当前Object的String〇TrimToSize将容量设置为ArrayList中元素的实际数量。举例:publicA门•ayList();初始化ArrayList类的新实例,该实例为空并且容量为16〇publicArrayList(int);初始化ArrayList类的新实例,该实例为空并且具有指定的初始容量。usingSystem;usingSystem.Collections;classmyclass(staticvoidMainO(ArrayListmyall=newArrayList();ArrayListmyal2=newArrayList(2);Console.WriteLineCmyall,capacity:{0},count:{1}”,myall.Capacity,myall.Count);Console.WriteLine("myal2.capacity:{0},count:{1}",myal2.Capacity,myal2.Count);myall.Add(10);myal1.Add(12);myall.Add("aldk");myall.Add(3>5);myall.Add('1');for(inti=0;i<=14;i++)myal2.Add(2*i+1);for(inti=0;i<myal1.Count;i++)Console.Write("{0}",myall[i]);Console.WriteLine();for(inti=0;i<myal2.Count;i++)Console.Write("{0}",mya12[i]);Console.WriteLine();Console.WriteLine("myall,capacity:{0},count:{lj,myall.Capacity,myall.Count);Console.WriteLine("myal2.capacity:{0},count:{1},myal2.Capacity,myal2.Count);myal2.ReverseO;foreach(intelementinmyal2)Console.Write("{0}element);Console.WriteLine();mya12.Remove(19);foreach(intelementinmyal2)Console.Write("{0}",element);Console.WriteLine();2.6.2BitArray集合BitArray集合是管理位ー级数据的数据结构,该值表示为布尔值,其中true表示位是打开的(1),false表示位是关闭的(0)〇usingSystem;usingSystem.Collections;classmyclass{staticvoidMainO(BitArraymyba=newBitArray(4);myba[2]=true;for(inti=0;i<myba.Length;i++)Console.Write(myba[i]+*");Console.WriteLine();myba.SetAll(true);for(inti=0;i<myba.Length;i++)Console.Write(myba[i]+/z");Console.WriteLine();})例:利用筛选法求2—100间的所有素数。显ホ答案:2.6.3HashTable集合表示键/值对的集合,每个元素是ー个存储在DictionaryEntry(定义可设置或检索的字典键值对)对象中的键/值对。键不能为空引用,但值可以。每ー个值都必须有唯啲键来标识,对值的添加和索引必须通过键。具体成员参加帮助。usingSystem;usingSystem.Collections;publicclassSamplesHashtable(publicstaticvoidMainO(HashtablemyllT=newHashtableO;myHT.Add("First","Hello");myHT.Add("Second","World");myHT.Add("Third","!");Console.WriteLine(myHT["Second"]);Console.WriteLine();2.6.4Queue集合Queue集合表示对象的先进先出集合。具体成员参加帮助。usingSystem;usingSystem.Collections;publicclassSamplesHashtablepublicstaticvoidMainOQueueq=newQueue();q.Enqueue("messagel");q.Enqueue("message2");q.Enqueue("message3");Console.WriteLine(q.Dequeue0);Console.WriteLine(q.Dequeue());Console.WriteLine(q.Dequeue());})例:计算先进先出算法的缺页率。2.6.5SortedList集合SortedList类类似于Hashtable和ArrayList间的混合。(1)与Hashtable—样,SortedList也基于!Dictionary接口;因此,SortedList的每•一元素都是键和值对。SortedList提供只返回键列表或只返回值列表的方法。(2)与ArrayList一样,SortedList是元素序列。它被索引,并且根据特定的比较器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目管理过程中的利益冲突解决试题及答案
- 项目管理的文档管理要求试题及答案
- 注册会计师考试基础大纲试题及答案
- 微生物检验重要法规与试题及答案
- 2025注册会计师自我考核方法试题及答案
- 宁夏银川市本年度(2025)小学一年级数学统编版期中考试(上学期)试卷及答案
- 试题对比注册会计师备考指南及答案
- 注册会计师交流和学习试题及答案
- 项目管理的有效工具考题及答案
- 课题申报书编码
- 地操式行车安全操作规程【实用文档】doc
- LY/T 2006-2012荒漠生态系统服务评估规范
- 菩萨蛮黄鹤楼(毛泽东).中职课件电子教案
- 《青少年心理健康研究开题报告文献综述(4500字)》
- 2023年司法考试民法历年主观题真题及答案
- 意向竞租人报名确认表
- 新形态一体化教材建设的探索与实践课件
- 高校行政考试必背
- 微波技术与天线-第三章-微波元器件课件
- 互联网+智慧校园解决方案(最新详细方案)
- CPK基本知识及实例
评论
0/150
提交评论