C#程序设计基础入门教程(第3版)课件 第6-11章 C#常用类- 综合项目-图书管理系统_第1页
C#程序设计基础入门教程(第3版)课件 第6-11章 C#常用类- 综合项目-图书管理系统_第2页
C#程序设计基础入门教程(第3版)课件 第6-11章 C#常用类- 综合项目-图书管理系统_第3页
C#程序设计基础入门教程(第3版)课件 第6-11章 C#常用类- 综合项目-图书管理系统_第4页
C#程序设计基础入门教程(第3版)课件 第6-11章 C#常用类- 综合项目-图书管理系统_第5页
已阅读5页,还剩712页未读 继续免费阅读

下载本文档

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

文档简介

第6章C#常用类《C#程序设计基础入门教程(第3版)》学习目标/Target掌握string类的用法,能够使用string类进行字符串的定义与操作。

掌握StringBuilder类的用法,能够使用StringBuilder类进行字符串的定义与操作。掌握DateTime类的用法,能够使用DateTime类进行日期和时间的处理。掌握Random类的用法,能够使用Random类生成符合需求的随机数。章节概述/SummaryC#提供了成千上万的类,每个类都有其特定的功能,其中有很多类都是在程序中经常会用到的,例如用于操作字符串的类、用于操作日期的类、用于生成随机数的类等,本章将对这些常用类进行详细讲解。目录/Contents010203string类高效的StringBuilderDateTime类04Random类string类6.1在程序开发中经常会使用到字符串,所谓的字符串就是指一连串的字符,这些字符必须包含在一对英文半角格式的双引号("")内,例如"HelloWorld"。为了表示字符串,C#提供了一个类string,本节将对string类进行详细讲解。6.1string类6.1.1string类的初始化掌握string类的用法,能够通过案例演示string类的初始化。学习目标在使用string字符串之前需要对string类进行初始化。在C#中可以通过以下几种方式对string类进行初始化。1.使用字符串常量直接给一个string对象赋值。具体代码stringstr="abc"

6.1.1string类的初始化使用string类的构造方法初始化字符串对象。string类中有很多重载的构造方法,常用的两个构造方法如表。6.1.1string类的初始化方法名称功能描述string(Char[]charArray)使用字符数组中的元素初始化string实例string(Charch,intnum)使用num个ch字符初始化string实例下面通过一个案例来演示string类的初始化。在解决方案Chapter06中创建一个项目名为Program01的控制台应用程序,具体代码如例。点击查看6.1.1string类的初始化运行程序,运行结果如图。6.1.1string类的初始化str1的值为"HelloWorld",str2的值为"nihao",str3的值为"aaaaaa",表明可使用上述3种初始化方式初始化string类对象。注意在程序中,string类型和String类型都可以实例化字符串对象。不同之处在于,string类型是C#语言中用来表示字符串的类型,而String类型是.NET通用类型系统中用来表示字符串的类型。在程序开发过程中,这两种类型之所以都能表示字符串,是因为程序编译时,C#语言中的string类型会被编译成.NET通用类型系统中的String类型。

6.1.1string类的初始化在编程过程中,定义string类型的变量后如果不需要立即对其进行初始化,一般会将其初始化为一个空字符串。空字符串常量示例代码stringstr1="";stringstr2=""; 6.1.1string类的初始化使用这种形式定义的空字符串不够清晰,为了更好地表示空字符串,.NET平台提供了一个空字符串常量String.Empty,该常量可以代替上述空字符串。空字符串常量示例代码stringstr1=String.Empty;stringstr2=String.Empty; 6.1.1string类的初始化6.1.2字符串的不可变性掌握string类的用法,能够描述字符串的不可变性的概念。学习目标字符串的不可变性是指一旦创建字符串对象,就无法对其进行修改。例如,有一个字符串"abc",如果对其进行修改,其内存就会发生变化,具体如图。6.1.2字符串的不可变性在代码编写过程中,有时需要创建多个字符串对象,由于字符串具有不可变性,因此这些字符串对象对应的值都会占用内存空间。为此,.NET框架的底层提供了一种机制,若一个字符串已经被创建,那么以后每次创建相同值的字符串时会直接引用它的地址,而无须重新开辟新的内存空间。这种机制称为字符串拘留池机制。字符串拘留池机制是由.NET框架完成的,不用人为管理,这样可以提高字符串使用的效率。字符串拘留池机制6.1.2字符串的不可变性6.1.3字符串与字符数组掌握string类的用法,能够通过案例演示字符串的遍历。学习目标在程序开发中,为了方便访问字符串中的某个字符,可以将字符串看作一个char类型的数组,即字符数组,这样可以通过索引方式访问字符串中的单个字符。由于字符串是不可变的,字符串只能看作只读的字符数组。同字符数组类似,字符串也是通过Length属性来获取长度。6.1.3字符串与字符数组下面通过一个具体的案例来演示字符串的遍历。在解决方案Chapter06中创建一个项目名为Program02的控制台应用程序,具体代码如例。点击查看6.1.3字符串与字符数组运行程序,运行结果如图。6.1.3字符串与字符数组6.1.4String类的静态方法掌握string类的用法,能够通过案例演示string()类的静态方法的应用。学习目标在程序开发中,经常需要在不实例化字符串的情况下实现某些功能,例如判断字符串是否为空、格式化字符串等。为此string类提供了许多静态方法,表中列举了string类常用的静态方法。方法声明功能描述intCompare(stringstr1,stringstr2)比较两个字符串内容是否相同stringFormat(stringformat,Objectarg0,Objectarg1,...)格式化字符串boolIsNullOrEmpty(stringstr)判断一个字符串是否为空stringJoin(stringseparator,string[]strarr)使用指定分隔符连接字符串数组中的元素stringJoin<T>(stringseparator,IEnumerable<T>values)使用指定分隔符连接集合中的元素6.1.4String类的静态方法表中列举的这些静态方法在字符串操作中非常重要。为了帮助初学者熟练掌握这些方法,下面对这些方法逐一进行讲解。6.1.4String类的静态方法Compare()方法用于比较两个字符串内容是否相同,该方法有两个string类型参数,用于接收进行对比的字符串。如果第一个字符串大于第二个字符串,则返回一个大于0的int类型数据;如果两个字符串相同,则返回0;若第一个字符串小于第二个字符串,则返回一个小于0的int类型数据。1.Compare()方法6.1.4String类的静态方法字符串比较采用字典排序法,所谓字典排序法就是首先比较两个字符串的第一个字符,第一个字符大的字符串就大,如果两个字符串的第一个字符相同,那么就比较第二个字符,以此类推,最终得到较大的字符串。1.Compare()方法6.1.4String类的静态方法下面通过一个案例来演示Compare()方法的应用,在本案例中,从键盘输入两个字符串,比较两个字符串的大小。在解决方案Chapter06中创建一个项目名为Program03的控制台应用程序,具体代码如例。点击查看6.1.4String类的静态方法1.Compare()方法运行程序,运行结果如图。6.1.4String类的静态方法1.Compare()方法在Program03\Program.cs中,第10~11行代码调用了Console.ReadLine()方法,它是C#中常用的输入方法。C#提供了两个常用的输入方法,分别是Console.Read()和Console.ReadLine(),下面分别进行讲解。Console.Read()方法Console.Read()方法用于从控制台读取一个字符,并将其作为整数返回,它会阻塞程序直到用户按下任意键,Console.Read()方法的用法示例如下。Console.Read()方法和Console.ReadLine()方法6.1.4String类的静态方法intkey=Console.Read(); 2.Console.ReadLine()方法Console.ReadLine()方法用于从控制台读取一行文本,它会阻塞程序直到用户按Enter键。Console.ReadLine()方法会读取用户输入的所有字符,但不包括Enter键。Console.ReadLine()方法用法示例如下。Console.Read()方法和Console.ReadLine()方法6.1.4String类的静态方法stringstr=Console.ReadLine(); C#提供了输入方法,也提供了输出方法,常用的输出方法有Console.Write()和Console.WriteLine(),它们都用于向控制台输出一行文本,区别是Console.Write()方法不换行,而Console.WriteLine()方法会在末尾换行。Format()方法用于格式化字符串,它允许用户将一个或多个值插入字符串中的占位符位置,并根据指定的格式进行转换。Format()方法中的占位符形式为{0}、{1}、{2}等。Format()方法中的第1个参数format是一个包含零个或多个占位符的复合格式字符串,后面的arg0、arg1等是要替换占位符的对象列表。2.Format()方法6.1.4String类的静态方法在实际开发中,Format()方法的应用非常广泛,例如,要开发一个软件,在登录界面根据用户的姓名和登录日期生成个性化的欢迎信息,就可以调用Format()方法实现。下面通过一个案例实现上述场景,在解决方案Chapter06中创建一个项目名为Program04的控制台应用程序,具体代码如例。点击查看6.1.4String类的静态方法2.Format()方法运行程序,运行结果如图。6.1.4String类的静态方法2.Format()方法程序输出了关于用户孙雪的欢迎信息,表明调用Format()方法成功完成了字符串的格式化。IsNullOrEmpty()方法用来判断字符串是否为空,当字符串为空时,该方法的返回值为true,否则返回值为false。IsNullOrEmpty()方法在实际开发中的应用也非常广泛,例如,在开发软件时要考虑到,如果用户输入的用户名、密码为空,需要提示用户名或密码不能为空。3.IsNullOrEmpty()方法6.1.4String类的静态方法下面通过一个案例实现上述场景,在解决方案Chapter06中创建一个项目名为Program05的控制台应用程序,具体代码如例。点击查看6.1.4String类的静态方法3.IsNullOrEmpty()方法运行程序,根据提示信息进行以下连续输入。1.不输入用户名,直接按Enter键。2.输入正确的用户名。3.不输入密码,直接按Enter键。4.输入正确的密码。运行结果如图。6.1.4String类的静态方法3.IsNullOrEmpty()方法Join()方法的作用是使用指定分隔符将一组数据连接成一个字符串,它有多种重载形式,表string类常用的静态方法提供了Join()方法比较常用的两种重载形式:使用指定分隔符连接字符串数组中的元素,以及使用指定分隔符连接集合中的元素。4.Join()方法6.1.4String类的静态方法在实际开发中,Format()方法的应用非常广泛,例如,要开发一个软件,在登录界面根据用户的姓名和登录日期生成个性化的欢迎信息,就可以调用Format()方法实现。下面通过一个案例实现上述场景,在解决方案Chapter06中创建一个项目名为Program04的控制台应用程序,具体代码如例。点击查看6.1.4String类的静态方法4.Join()方法Join()方法的作用是使用指定分隔符将一组数据连接成一个字符串,它有多种重载形式,表string类常用的静态方法提供了Join()方法比较常用的两种重载形式:使用指定分隔符连接字符串数组中的元素,以及使用指定分隔符连接集合中的元素。4.Join()方法6.1.4String类的静态方法运行程序,运行结果如图入。6.1.4String类的静态方法4.Join()方法程序成功输出了一条日志条目信息,表明调用Join()方法成功将List<string>集合中的字段连接起来了。6.1.5String类的实例方法掌握string类的用法,能够通过案例演示string()类的实例方法的应用。学习目标除静态方法外,string类还提供了一些实例方法,这些方法需要先创建实例对象才能被调用,表列举了string类常用的实例方法。方法声明功能描述boolContains(stringstr)判断当前字符串中是否包含指定字符串boolEndsWith(stringstr)判断当前字符串是否使用指定字符串结尾intIndexOf(charch)获得指定字符或字符串在当前字符串中的位置string[]Split(char[]charArray)将字符串以某种字符分隔6.1.5String类的实例方法方法声明功能描述stringSubstring(intindex)从index索引处截取当前字符串char[]ToCharArray()将当前字符串转换为字符数组stringToUpper()将当前字符串中的英文转换成大写字母stringTrim()去除字符串两边的空白字符6.1.5String类的实例方法这些实例方法在字符串操作中非常重要。为了帮助初学者熟练掌握这些方法,下面对这些方法逐一进行讲解。6.1.5String类的实例方法Contains()方法用于判断一个字符串中是否包含指定字符串,该方法在实际开发中应用比较广泛,例如,在检测文本时,经常会调用Contains()方法查找关键词。下面通过一个具体的案例来演示Contains()方法的用法。在本案例中,用户从键盘输入一段文本,检测文本中是否包含要查找的关键词:“春风”“明月”。1.Contains()方法6.1.5String类的实例方法在解决方案Chapter06中创建一个项目名为Program07的控制台应用程序,具体代码如例。点击查看6.1.5String类的实例方法1.Contains()方法EndsWith()方法用于判断当前字符串是否以指定字符串结尾,该方法在处理文件路径、URL或者需要验证字符串结尾的场景下非常有用。下面通过一个具体的案例来演示EndsWith()方法的用法,在本案例中,获取当前计算机D:\temp目录下的所有.png文件。2.EndsWith()方法6.1.5String类的实例方法在解决方案Chapter06中创建一个项目名为Program08的控制台应用程序,具体代码如例。点击查看6.1.5String类的实例方法2.EndsWith()方法运行程序,运行结果如图。6.1.5String类的实例方法2.EndsWith()方法IndexOf()方法用于获取指定字符或字符串在当前字符串中的第一个匹配项的位置。如果找到了匹配项,它将返回该匹配项的索引;如果没有找到,则返回-1。IndexOf()方法有多个重载版本,允许调用者根据不同的需求来使用。3.IndexOf()方法6.1.5String类的实例方法下面通过一个案例来演示IndexOf()方法的用法。在本案例中,假设用户要注册邮箱,开发者需要验证电子邮箱的格式是否正确,通常电子邮箱的格式为×××@×××.×××,在验证电子邮箱格式时,有3个关键点,具体如下。(1)“@”符号不能位于第1位,即其索引要大于0。(2)“.”符号要在“@”符号后,且不能在最后一位,即“.”符号的索引要大于“@”符号,且不能是最后一个索引。(3)“.”符号和“@”符号之间要有其他字符,即“.”符号的索引要大于“@”符号的索引加1。6.1.5String类的实例方法3.IndexOf()方法在解决方案Chapter06中创建一个项目名为Program09的控制台应用程序,具体代码如例。点击查看6.1.5String类的实例方法3.IndexOf()方法运行程序,根据提示,输入一个正确的电子邮箱,运行结果如图。6.1.5String类的实例方法3.IndexOf()方法当输入正确的电子邮箱时,程序输出了“电子邮箱格式正确”的提示信息,表明案例实现成功。读者可以输入一个不正确的电子邮箱,再次进行验证。Split()方法专门用来分隔字符串。例如,有一个字符串"Ihaveadream",要想统计该字符串中单词的个数,可以使用Split()方法将字符串以空格分隔成字符串数组。Split()方法有多种重载形式,允许用户根据不同的需求来使用,其中比较常用的是使用指定字符或使用指定字符串进行分隔。4.Split()方法6.1.5String类的实例方法在实际开发中,Split()方法用途非常多,例如解析CVS数据、分割日志条目、提取URL中的参数等。下面通过一个案例演示Split()方法的用法。在本案例中,假设用户向公司服务器发送查询某员工信息的请求,服务器返回一条数据:Lili女29岁信息技术部门C#开发工程师130xxxx1234。将返回的信息分隔成相应字段输出。4.Split()方法6.1.5String类的实例方法在解决方案Chapter06中创建一个项目名为Program10的控制台应用程序,具体代码如例。点击查看6.1.5String类的实例方法4.Split()方法运行程序,运行结果如图。6.1.5String类的实例方法程序成功输出了员工信息的各个字段,表明调用Split()方法成功对一条员工信息数据进行了分割。4.Split()方法Substring()方法的作用是对字符串进行截取,它有多种重载形式,其中比较常用的两种重载形式如下所示。语法结构Substring(intstartIndex);Substring(intstartIndex,intlength);

6.1.5String类的实例方法5.Substring()方法从指定的索引位置开始提取子字符串,直到字符串的末尾从指定的索引位置开始提取指定长度的子字符串在解决方案Chapter06中创建一个项目名为Program11的控制台应用程序,具体代码如例。点击查看6.1.5String类的实例方法5.Substring()方法运行程序,运行结果如图。6.1.5String类的实例方法5.Substring()方法ToCharArray()方法的作用是将字符串转换成字符数组。下面通过一个具体的案例来演示ToCharArray()方法的用法,在解决方案Chapter06中创建一个项目名为Program12的控制台应用程序,具体代码如例。点击查看6.1.5String类的实例方法6.ToCharArray()方法运行程序,运行结果如图。6.1.5String类的实例方法6.ToCharArray()方法ToUpper()方法的作用是将字符串中所有的英文字母都转换成大写字母。下面通过一个具体的案例来演示ToUpper()方法的用法,在解决方案Chapter06中创建一个项目名为Program13的控制台应用程序,具体代码如例。点击查看6.1.5String类的实例方法7.ToUpper()方法运行程序,运行结果如图。6.1.5String类的实例方法7.ToUpper()方法程序成功将"itcast"字符串中的英文字母转换成了大写。Trim()方法用来去除字符串两端的空白字符,空白字符包括空格('')、制表符('\t')、回车符('\r')等。Trim()方法应用非常广泛,例如,用户输入信息时,如果不小心在结束的位置输入了一个空格,那么将无法获得准确数据。因此,需要使用Trim()方法将字符串两端的空格去掉。8.Trim()方法6.1.5String类的实例方法下面通过一个案例来演示Trim()方法的用法,在解决方案Chapter06中创建一个项目名为Program14的控制台应用程序,具体代码如例。点击查看6.1.5String类的实例方法8.Trim()方法运行程序,运行结果如图。6.1.5String类的实例方法符串两端的空格被去除,表明Trim()方法调用成功。8.Trim()方法高效的StringBuilder6.26.2.1StringBuilder类掌握StringBuilder类的用法,能够使用StringBuilder类进行字符串的定义。学习目标6.2.1StringBuilder类在程序开发过程中,经常会使用大量的字符串,由于字符串是不可变的,在代码中频繁地拼接字符串会创建多余的对象,从而影响程序的性能。为了解决上述问题,C#提供了StringBuilder类,它和string类都用于操作字符串。与string类不同的是,StringBuilder类创建的字符串的长度是可以改变的,它类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuilder对象,因此可以使字符串的拼接操作更加高效。6.2.1StringBuilder类针对字符串的操作,StringBuilder类提供了一系列常用的方法,如表。方法声明功能描述StringBuilderAppend(stringstr)将字符串str添加到StringBuilder对象的末尾StringBuilderInsert(intoffset,stringstr)在字符串中的offset位置插入字符串strStringBuilderReplace(stringstr1,stringstr2)使用字符串str2替换字符串str1StringBuilderRemove(intindex,intlength)从字符串的指定索引位置index开始,移除length长度的字符串stringToString()将StringBuilder类型转换成string类型6.2.1StringBuilder类为了帮助初学者熟练掌握这些方法,下面通过一个具体的案例来演示这些方法的用法。在本案例中开发一个简单的文本编辑器,允许用户进行添加、删除和替换操作。6.2.1StringBuilder类在解决方案Chapter06中创建一个项目名为Program15的控制台应用程序,在项目Program15中添加一个类TextEditor,在TextEditor类中定义添加文本、删除文本、替换文本、转换为string类对象的方法,TextEditor类的具体代码如例。点击查看6.2.1StringBuilder类在Program15项目的TextEditor.cs文件中编辑逻辑代码,创建文本编辑器,并实现文本的添加、替换与删除等操作,具体代码如例。点击查看6.2.1StringBuilder类运行程序,运行结果如图。6.2.1StringBuilder类6.2.2StringBuilder性能分析掌握StringBuilder类的用法,能够完成StringBuilder的性能分析。学习目标通过string类创建的字符串是不可以改变的,在进行字符串修改、删除、拼接等操作时,都会创建新的字符串对象。通过StringBuilder类创建的字符串长度是可变的,它避免了每次操作都创建新的字符串对象,因此,相比string类,StringBuilder类更加高效。6.2.2StringBuilder性能分析下面通过具体的案例对string类和StringBuilder类的性能进行分析。在分析两个字符串类的性能之前,需要学习一个类Stopwatch,Stopwatch类是.NET框架中System.Diagnostics命名空间下的一个类,用于测量时间间隔。它提供了一种简单而精确的方式来度量代码执行的时间。6.2.2StringBuilder性能分析Stopwatch类提供了一些与计时相关的方法与属性,其中常用的方法和属性有以下几个。1Start()方法:Stop()方法:启动计时。2结束计时。6.2.2StringBuilder性能分析Elapsed属性:3获取计时开始到结束所经过的时间。Elapsed属性本身并不直接返回时间的数值形式,而是返回一个TimeSpan

类型的对象,可以通过访问这个对象的各个部分来获取所需的时间单位。常用的时间单位如下所示。1Elapsed.Days:Elapsed.Hours:表示已经过去的天数。2表示超过完整天数后的小时数。6.2.2StringBuilder性能分析Elapsed.Minutes:3表示超过完整小时后的分钟数。Elapsed.Seconds:4表示超过完整分钟后的秒数。Elapsed.Milliseconds:5表示超过完整秒数后的毫秒数。Elapsed.Microseconds:6表示超过完整秒数的微秒数。在Program15项目的TextEditor.cs文件中编辑逻辑代码,创建文本编辑器,并实现文本的添加、替换与删除等操作,具体代码如例。点击查看6.2.2StringBuilder性能分析运行程序,运行结果如图。6.2.2StringBuilder性能分析string字符串拼接10000次所用的时间是943微秒。下面修改Program16\Program.cs中的代码来测试StringBuilder字符串拼接10000次所用的时间。在解决方案Chapter06中创建一个项目名为Program17的控制台应用程序,具体代码如例。点击查看6.2.2StringBuilder性能分析运行程序,运行结果如图。6.2.2StringBuilder性能分析StringBuilder字符串拼接10000次所用的时间是305微秒。通过与string字符串所用拼接时间对比可以发现,在同等情况下StringBuilder类的性能远远高于string类,因此在频繁进行字符串操作时应优先使用StringBuilder类。DateTime类6.36.3.1DateTime类的构造掌握DateTime类的用法,能够使用DateTime类进行日期和时间的处理。学习目标DateTime类在C#中用于表示日期和时间。它是.NET框架中的一个核心类,提供了丰富的功能来处理日期和时间数据。6.3.1DateTime类的构造在使用DateTime类操作日期和时间数据之前,需要创建DateTime类对象,DateTime类提供了很多构造方法,其中常用的构造方法如表。名称功能描述DateTime(intyear,intmonth,intday)将

DateTime类的实例初始化为指定的年、月和日DateTime(intyear,intmonth,intday,inthour,intminute,intsecond)将

DateTime类的实例初始化为指定的年、月、日、小时、分钟和秒DateTime(stringstr)将DateTime类的实例初始化为字符串表示的日期和时间6.3.1DateTime类的构造下面通过一个案例来演示DateTime类对象的创建,在解决方案Chapter06中创建一个项目名为Program18的控制台应用程序,具体代码如例。点击查看6.3.1DateTime类的构造运行程序,运行结果如图。S3个时间都正确输出,表明通过表6-5中的构造方法成功创建了DateTime类对象。6.3.1DateTime类的构造TimeSpan类用于表示时间间隔,即两个日期或时间之间的差值。它提供了丰富的功能来处理时间间隔的计算、比较和格式化。在使用DateTime类时经常需要使用TimeSpan类计算两个日期或时间之间的间隔。TimeSpan类提供了多个构造方法,其中有两个比较常用的构造方法,具体如表。TimeSpan类名称功能描述TimeSpan(inthour,intminute,intsecond)将

TimeSpan

对象初始化为指定的小时数、分钟数和秒数TimeSpan(intday,inthour,intminute,intsecond)将TimeSpan

对象初始化为指定的天数、小时数、分钟数和秒数6.3.1DateTime类的构造下面通过具体的案例来演示如何使用表TimeSpan类的常用构造方法中的两个构造方法,在解决方案Chapter06中创建一个项目名为Program19的控制台应用程序,本案例的具体代码如例。TimeSpan类点击查看6.3.1DateTime类的构造运行程序,运行结果如图。TimeSpan类6.3.1DateTime类的构造6.3.2DateTime类的常用属性掌握DateTime类的用法,能够通过案例演示DateTime类的常用属性的应用。学习目标在处理日期数据的过程中,经常需要通过DateTime对象的属性来获取日期中的某一部分信息,表列举了DataTime类的常用属性。名称功能描述Date获取此实例的日期部分Day获取此实例所表示的日期为该月中的第几天Hour获取此实例所表示日期的小时部分Minute获取此实例所表示日期的分钟部分6.3.2DateTime类的常用属性名称功能描述Second获取此实例所表示日期的秒钟部分Month获取此实例所表示日期的月份部分Today获取当前日期Year获取此实例所表示日期的年份部分Now获取一个DateTime对象,该对象表示计算机上的当前日期和时间,即本地时间6.3.2DateTime类的常用属性下面通过案例演示表DateTime类的常用属性中的属性的用法,在解决方案Chapter06中创建一个项目名为Program20的控制台应用程序,具体代码如例。点击查看6.3.2DateTime类的常用属性运行程序,运行结果如图。6.3.2DateTime类的常用属性6.3.3DateTime类的常用方法掌握DateTime类的用法,能够通过案例演示DateTime类的常用方法的应用。学习目标在程序开发过程中,经常需要对日期和时间进行处理,例如比较两个日期是否相等、对日期和时间进行格式化、计算两个日期之间的差值等。针对日期和时间的处理,DateTime类提供了一些常用方法,如表。名称功能描述DateTimeAdd(TimeSpants)将指定时间间隔添加到DateTime对象的值上,即将原有日期和时间与时间间隔相加,返回一个DateTime对象boolEquals(DateTimedt)判断DateTime对象表示的日期和时间是否与参数

DateTime

对象表示的日期和时间相等,返回一个bool值stringToShortTimeString()将当前

DateTime

对象的值转换为等效的短时间格式表示,例如,2025/1/112:00:00转换为短时间格式为12:00intCompare(DateTimedt1,DateTimedt2)将两个

DateTime

对象进行比较,如果dt1早于dt2,返回整数-1;如果dt1等于dt2,返回整数0;如果dt1晚于dt2,返回整数16.3.3DateTime类的常用方法下面通过一个案例演示表DateTime类的常用方法中的方法的应用,在解决方案Chapter06中创建一个项目名为Program21的控制台应用程序,具体代码如例。点击查看6.3.3DateTime类的常用方法运行程序,运行结果如图。6.3.3DateTime类的常用方法Random类6.46.4Random类掌握Random类的用法,能够使用Random类生成符合需求的随机数。学习目标在程序开发过程中,经常需要生成一些随机数,例如,随机生成中奖号码。C#语言提供了一个Random类,该类是一个伪随机数生成器,它可以随机产生数字。6.4Random类在使用Random类生成随机数之前,需要创建Random类对象,Random类提供了两个构造方法,具体如表。名称功能描述Random()使用与时间相关的默认种子值,初始化

Random

类的新实例对象Random(intseed)使用指定的种子值初始化

Random

类的新实例对象6.4Random类除了构造方法,Random类还提供了多个用于生成不同类型的随机数的方法,常用的方法如表。名称功能描述intNext()返回一个非负随机整数intNext(intmax)返回一个小于max的非负随机整数intNext(intmin,intmax)返回[min,max)的任意整数doubleNextDouble()返回一个[0.0,1.0)的随机浮点数6.4Random类下面通过一个案例演示如何使用Random类生成不同类型的随机数。在解决方案Chapter06中创建一个项目名为Program22的控制台应用程序,本案例的具体代码如例。点击查看6.4Random类运行程序,运行结果如图。6.4Random类在解决方案Chapter06中创建一个项目名为Program23的控制台应用程序,在项目Program23中添加一个表示彩票的类Lottery,在Lottery类中定义生成双色球号码的方法,将生成的号码存储到List<T>集合中。Lottery类的具体代码如例。点击查看6.4Random类接下来在项目Program23的Program.cs文件中编写逻辑代码,创建Lottery类对象,调用相应方法随机生成双色球号码并输出,具体代码如例。点击查看6.4Random类运行程序,运行结果如图。6.4Random类本章小结本章首先对string类的初始化、字符串的不可变性、string类的静态方法和实例方法等逐一进行了介绍;然后对StringBuilder类的作用与常用方法进行了讲解,并通过string类与StringBuilder类的对比案例说明了在拼接字符串时StringBuilder类的性能远高于string类;接着讲解了DateTime类的常用属性和方法;最后讲解了如何使用Random类生成随机数。通过学习本章的内容,读者可以掌握String、DateTime、Random等常用类的使用方法。本章小结第7章文件操作《C#程序设计基础入门教程(第3版)》学习目标/Target了解流与文件流,能够说出文件流的概念与分类。

掌握File类的用法,能够使用File类实现文件的创建、复制、移动等操作。掌握FileInfo类的用法,能够使用FileInfo类获取文件的相关信息。掌握Directory类的用法,能够使用Directory类实现目录的创建、删除、查询等操作。掌握DirectoryInfo类的用法,能够使用DirectoryInfo类获取目录的相关信息。学习目标/Target掌握FileStream类的用法,能够使用FileStream类以字节流形式读写文件。

掌握StreamReader类和StreamWriter类的用法,能够使用这两个类实现文本文件的读写。掌握Path类的用法,能够使用Path类获取文件路径信息,以及操作文件路径。掌握BufferedStream类的用法,能够使用BufferedStream类实现文件的高效读写。章节概述/Summary在C#程序中,当操作变量与常量时,这些变量与常量的值是存放在内存中的,程序运行结束后,使用的数据会被全部清除。如果想要长久保存程序中的数据,可以选择使用文件或数据库(将在后面章节中讲解)来存储,文件通常存放在计算机磁盘的指定位置,文件形式可以是记事本、Word文档、图片等。针对文件操作,C#提供了相应的类来实现文件的创建、移动、读写等,本章将对文件操作进行详细讲解。目录/Contents010203流和文件流System.IO命名空间File类和FileInfo类04Directory类和DirectoryInfo类目录/Contents050607FileStream类StreamReader类和StreamWriter类Path类08BufferedStream类流和文件流7.17.1流和文件流了解流与文件流,能够说出文件流的概念与分类。学习目标大多数应用程序都需要实现与设备之间的数据传输,例如,通过键盘输入数据、通过显示器显示程序的运行结果等。在C#中,将这种不同输入/输出设备之间的数据传输抽象表述为“流”,程序可以通过流的方式与输入/输出设备进行数据传输。C#中的“流”都位于System.IO命名空间中,称为I/O(Input/Output,输入/输出)流。7.1流和文件流C#中的流统称为文件流,根据数据的传输方向可将其分为输入流和输出流。为了方便理解,可以把输入流和输出流比作两根“管道”,如图。7.1流和文件流System.IO命名空间7.27.2System.IO命名空间了解System.IO命名空间,能够说出System.IO命名空间中的常用类。学习目标在C#中,文件操作类都位于System.IO命名空间中,因此在使用这些类时需要引入System.IO命名空间。该命名空间中包含很多类,常用类如图。7.2System.IO命名空间File类和FileInfo类7.3前文中讲解了流可以对文件的内容进行读写操作,而在应用程序中还可能需要对文件自身进行一些操作,例如创建、删除或者重命名某个文件,判断磁盘上某个文件是否存在等。针对这些操作,C#提供了File类和FileInfo类,本节将对这两个类进行详细讲解。7.3File类和FileInfo类7.3.1File类掌握File类的用法,能够使用File类实现文件的创建、复制、移动等操作。学习目标File类是一个静态类,它提供了许多静态方法,用于处理文件,使用这些方法可以对文件进行创建、移动、查询和删除等操作。File类常用的静态方法如表。属性说明FileStreamCreate(stringpath)根据传入的路径创建一个文件,如果文件不存在,则创建文件,如果文件存在且不是只读文件,则覆盖其内容WriteAllText(stringpath,stringcontents)创建一个新的文件,将指定的字符串写入该文件。如果文件已存在,则覆盖文件内容voidDelete(stringpath)如果文件存在,则删除指定的文件,如果指定的文件不存在也不引发异常7.3.1File类属性说明boolExists(stringpath)判断指定文件是否存在,若存在则返回true,否则返回falsevoidMove(stringsourceFileName,stringdestFileName)将指定的文件移动到新位置,可以在新位置为文件指定不同的名称FileStreamOpen(stringpath,FileModemode)打开指定路径的文件并返回FileStream对象voidCopy(stringsourceFileName,stringdestFileName)将现有的文件内容复制到新文件中voidCopy(stringsourceFileName,stringdestFileName,booloverwrite)将现有文件内容复制到新文件中,第3个参数用于指定是否覆盖原有文件,true表示覆盖,false表示不覆盖7.3.1File类下面通过一个案例来演示如何调用这些方法。本案例创建一个简单的文件管理器,首先构建一个命令行菜单,提供文件的创建、移动、复制、删除等操作,然后根据用户的选择执行相应的操作。7.3.1File类在解决方案Chapter07中创建一个项目名为Program01的控制台应用程序,具体代码如例。点击查看7.3.1File类运行程序,根据提示,输入不同的数字,执行不同的操作,运行结果如图。7.3.1File类相对路径是指当前文件相对于其他文件(或文件夹)的路径。例如,如果在路径D:\workspace\a\b\下有程序文件b.cs和文本文件a.txt,那么在b.cs文件中调用a.txt文件时,直接写文件名即可。相对路径使用符号“\”表示,具体使用方式如下。(1)在反斜线前面加一个点(.\)表示上一级目录。(2)在反斜线前面加两个点(..\)表示当前文件的根目录。绝对路径是指文件在磁盘上的完整路径,例如,D:\workspace\a\b\a.txt就是a.txt文件的绝对路径。相对路径与绝对路径7.3.1File类7.3.2FileInfo类掌握FileInfo类的用法,能够使用FileInfo类获取文件的相关信息。学习目标FileInfo类主要用于获取和设置文件的属性,例如文件名、路径、大小、创建时间等。FileInfo类是实例类,所有的方法都只能通过FileInfo类的实例对象调用。因此,在使用FileInfo类时,需要先创建FileInfo类的对象。FileInfo类提供了丰富的属性和方法,可用于获取文件信息、复制/移动/删除文件等。7.3.2FileInfo类7.3.2FileInfo类下面分别对FileInfo类对象的创建、FileInfo类的常用属性和FileInfo类的常用方法进行讲解。FileInfo类对象的创建AFileInfo类的常用属性BFileInfo类的常用方法BFileInfo类提供了多个构造方法,其中有一个比较常用的构造方法,需要向该构造方法传递一个文件路径作为参数,系统会获取对应文件的信息,将其保存在创建的FileInfo类对象中。1.FileInfo类对象的创建7.3.2FileInfo类通过该构造方法创建FileInfo类对象的具体代码如下所示。具体代码FileInfofile=newFileInfo(@"C:\Data.txt");

1.FileInfo类对象的创建7.3.2FileInfo类创建FileInfo类对象file,传入一个文件路径作为参数。参数路径前的“@”符号表示不解析转义字符。如果没有“@”符号,则需要使用“\\”替代“\”。因为“\”是转义字符,在程序中要表示一个“\”就需要使用“\\”。示例代码FileInfoaFile=newFileInfo("C:\\Data.txt");1.FileInfo类对象的创建7.3.2FileInfo类FileInfo类提供了很多属性,可用于获取文件的各种信息,如获取文件名称、获取文件所在目录、获取文件大小等。FileInfo类的常用属性如表。属性说明Exists判断文件是否存在,若存在则返回true,否则返回falseName获取文件的名称(不包括路径)Length获取文件的大小(以字节为单位)IsReadOnly用于判断文件是否是只读的DirectoryName用于返回文件目录,且这个属性是只读的7.3.2FileInfo类2.FileInfo类的常用属性除了属性,FileInfo类还提供了多个方法,用于对文件执行创建、删除、移动、复制等操作,FileInfo类的常用方法如表。属性说明Create()创建文件,返回一个FileStream对象CopyTo(stringdestFileName,booloverwrite)将当前文件复制到指定的路径,并可选择是否覆盖现有文件,返回一个新的FileInfo对象,该对象表示复制后的文件MoveTo(stringdestFileName)将当前文件移动到指定的路径,该方法无返回值Delete()删除当前文件,该方法无返回值7.3.2FileInfo类3.FileInfo类的常用方法在解决方案Chapter07中创建一个项目名为Program02的控制台应用程序,具体代码如例。7.3.2FileInfo类3.FileInfo类的常用方法点击查看运行程序,运行结果如图。7.3.2FileInfo类3.FileInfo类的常用方法运行结果C:\temp\file.txt文件Directory类和DirectoryInfo类7.4在程序开发中,不仅需要对文件进行操作,还需要对文件存放的目录进行操作,例如创建目录、删除目录等,为此C#提供了Directory类和DirectoryInfo类。本节将对Directory类与DirectoryInfo类进行详细讲解。7.4Directory类和DirectoryInfo类7.4.1Directory类掌握Directory类的用法,能够使用Directory类实现目录的创建、删除、查询等操作。学习目标Directory类是一个静态类,不可实例化,它提供了许多静态方法用于对文件的存放目录进行操作,例如创建、删除、查询等。Directory类的常用方法如表。属性说明DirectoryInfoCreateDirectory(stringpath)创建指定路径的目录voidDelete(stringpath)删除指定路径的空目录VoidDelete(stringpath,boolrecursive)删除指定路径的目录。如果recursive为true,则会递归删除该目录下的所有文件和子目录7.4.1Directory类属性说明boolExists(stringpath)判断指定路径目录是否存在,若存在,则返回true,否则返回falsestring[]GetDirectories(stringpath)获取指定路径下的所有子目录string[]GetFiles(stringpath)获取指定路径下的所有文件DirectoryInfoGetParent()查找指定路径的父目录,包括相对路径和绝对路径7.4.1Directory类下面通过一个简单的案例学习这些方法的应用。在本案例中,针对D:\temp目录进行一系列操作。在解决方案Chapter07中创建一个项目名为Program03的控制台应用程序,具体代码如例。点击查看7.4.1Directory类运行程序,运行结果如图。7.4.1Directory类7.4.2DirectoryInfo类掌握DirectoryInfo类的用法,能够使用DirectoryInfo类获取目录的相关信息。学习目标DirectoryInfo类的功能与Directory类相似,也是对目录进行操作,DirectoryInfo类提供了一系列的属性和方法。与Directory类不同的是,DirectoryInfo类是一个实例类,必须实例化才能使用。7.4.2DirectoryInfo类下面分别对DirectoryInfo类对象的创建、DirectoryInfo类的常用属性和DirectoryInfo类的常用方法进行讲解。DirectoryInfo类对象的创建ADirectoryInfo类的常用属性BDirectoryInfo类的常用方法C7.4.2DirectoryInfo类DirectoryInfo类提供了多个构造方法,其中,有一个比较常用的构造方法,需要向该构造方法传递一个目录作为参数,系统会获取该目录的信息,并保存在创建的DirectoryInfo类对象中。使用该构造方法创建DirectoryInfo类对象的具体代码如下所示。具体代码DirectoryInfodi=newDirectoryInfo(@"D:\temp");1.DirectoryInfo类对象的创建7.4.2DirectoryInfo类DirectoryInfo类提供了很多属性,用于获取目录的各种信息,如获取目录的创建时间。DirectoryInfo类的常用属性如表。属性说明Parent获取指定子目录的父目录Root获取路径的根目录Name获取当前DirectoryInfo对象的名称FullName获取目录的完整路径Exists判断指定目录是否存在CreationTime获取目录的创建时间7.4.2DirectoryInfo类2.DirectoryInfo类的常用属性除了属性,DirectoryInfo类还提供了多个方法,用于获取目录的相关信息,DirectoryInfo类的常用方法如表。属性说明CreateSubdirectory(stringpath)在指定路径中创建一个或多个子目录GetDirectories(stringpath)获取当前目录的子目录GetFiles()获取当前目录的文件列表Delete()删除指定的目录及其内容GetFileSystemInfos()获取当前目录的子目录和文件列表7.4.2DirectoryInfo类3.DirectoryInfo类的常用方法下面通过一个具体案例了解DirectoryInfo类的应用。在本案例中,使用DirectoryInfo类实现一个目录大小统计器,即给定一个目录,统计该目录下所有子目录及所有文件的大小。7.4.2DirectoryInfo类3.DirectoryInfo类的常用方法编写程序时,可以遵循以下思路。编程思路(1)可以定义一个方法(如GetFolderSize())统计指定目录的大小,在GetFolderSize()方法中,首先获取所有文件并统计这些文件的大小;然后获取所有的子目录,遍历每个子目录,递归调用GetFolderSize()方法统计每个子目录的大小;最后将指定的目录与统计的大小结果以键值对的形式存储到一个字典中。(2)由于目录大小并不确定,在输出时,为增加输出结果的可读性,可以定义一个方法(如FormatBytes())根据目录大小以不同的单位(如B、KB、MB、GB等)输出。在FormatBytes()方法中,定义一个字符串数组存储不同的单位,将目录大小与1024进行取余运算,根据余数(索引)获取单位。7.4.2DirectoryInfo类3.DirectoryInfo类的常用方法在解决方案Chapter07中创建一个项目名为Program04的控制台应用程序,具体代码如例。点击查看3.DirectoryInfo类的常用方法7.4.2DirectoryInfo类运行程序,运行结果如图。7.4.2DirectoryInfo类FileStream类7.5前面学习的File类、FileInfo类主要用于管理文件,如获取文件信息、创建文件、删除文件、移动文件等,如果要对文件进行读写,可以使用FileStream类。FileStream是.NET框架中System.IO命名空间下的一个类,它主要用于读写文件,本节将对FileStream类进行详细讲解。7.5FileStream类7.5.1FileStream类简介掌握FileStream类的用法,能够使用FileStream类的常用方法及属性。学习目标FileStream类提供了一种访问文件系统中的文件的方法,它允许应用程序以字节流的形式读取、写入、管理磁盘或网络路径上的文件,这使得FileStream类能够处理各种类型的数据文件,如图像、音频、视频以及文本文件等。7.5.1FileStream类简介下面分别对FileStream类对象的创建、FileStream类的常用方法和FileStream类的常用属性进行讲解。FileStream类对象的创建AFileStream类的常用方法BFileStream类的常用属性C7.5.1FileStream类简介使用FileStream类读写文件之前,需要创建FileStream类对象。FileStream类提供了很多重载的构造方法,比较常用的构造方法有两个,如表。属性说明publicFileStream(stringpath,FileModemode)使用指定的模式(mode)打开文件(path)publicFileStream(stringpath,FileModemode,FileAccessaccess)在打开文件时,除了指定模式外,还指定了访问权限(access)7.5.1FileStream类简介1.创建FileStream类对象创建FileStream类对象时,需要传入指定文件路径,当FileStream类对象创建完毕时,就意味着已经打开了文件,即构建了文件流,可以对文件进行读写操作了。除了指定文件路径,还可以指定文件打开模式和访问权限,关于文件打开模式和文件访问权限,下面分别进行介绍。7.5.1FileStream类简介1.创建FileStream类对象1文件打开模式:文件访问权限:文件打开模式的类型为FileMode,FileMode是System.IO命名空间中的一个枚举类型,它定义了多个枚举成员,用于指定文件打开模式。2文件访问权限的类型为FileAccess,FileAccess是System.IO

命名空间下的一个枚举类型,它定义了多个枚举成员,用于指定文件的访问权限。FileMode和FileAccess常用的枚举成员如表。枚举类型枚举成员说明FileModeCreateNew创建新文件;如果文件已存在,则抛出异常Create创建新文件;如果文件已存在,则覆盖它Open打开现有文件;如果文件不存在,则抛出异常OpenOrCreate打开现有文件;如果文件不存在,则创建新文件Truncate打开现有文件并清空其内容;如果文件不存在,则抛出异常Append打开现有文件并定位到文件末尾;如果文件不存在,则创建新文件7.5.1FileStream类简介1.创建FileStream类对象FileMode和FileAccess常用的枚举成员如表。枚举类型枚举成员说明FileAccessRead以只读方式打开文件Write以只写方式打开文件ReadWrite以读写方式打开文件7.5.1FileStream类简介1.创建FileStream类对象创建FileStream类对象的示例代码如下。示例代码FileStreamfile1=newFileStream("data1.txt",FileMode.Append);FileStreamfile2=newFileStream("data2.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite);1.创建FileStream类对象7.5.1FileStream类简介创建了FileStream对象file1,打开项目根目录下的data1.txt文件,指定文件打开模式为Append创建了FileStream对象file2,打开项目根目录下的data2.txt文件,指定文件打开模式为OpenOrCreate,文件访问权限为ReadWrite除了上述构造方法外,FileStream类还有一些常用方法,具体如表。方法说明intRead(byte[]array,intoffset,intcount)从流中读取一个数据块并将该数据块写入指定数组中voidWrite(byte[]array,intoffset,intcount)将数组中的数据块写入流中voidFlush()清除流的缓冲区,使得缓冲区中的数据都写入文件中longSeek(longoffset,SeekOriginorigin)将流的当前位置设置为给定值voidClose()关闭当前的FileStream对象并释放所有相关的系统资源7.5.1FileStream类简介2.FileStream类的常用方法FileStream类还提供了一些属性用于获取文件的相关信息,常用的属性如表。方法说明CanRead、CanWrite、CanSeek用于判断流是否支持读取、写入和定位操作Length获取当前文件的长度(以字节为单位)Position获取或设置当前文件内流的位置7.5.1FileStream类简介3.FileStream类的常用属性7.5.2FileStream类读取文件掌握FileStream类的用法,能够使用FileStream类以字节流形式读文件。学习目标使用FileStream类读取文件时,主要调用的方法为Read()方法,该方法可以从流(即文件)读取一个数据块存储到数组中。Read()方法有多种重载形式,但比较常用的是表7-9所示的形式,该形式中3个参数的含义如下所示。1array:offset:字节数组,用于存储从文件中读取的数据。2字节数组中的索引,表示从数组array的offset索引处开始存储数据。7.5.2FileStream类读取文件count:3要从文件中读取的数据块的大小。下面通过一个案例演示使用FileStream类从文件中读取数据。在本案例中,在项目根目录下创建一个名称为“古诗.txt”的文件并写入一首古诗,从文件“古诗.txt”中读取内容并输出到控制台。“古诗.txt”文件如图。7.5.2FileStream类读取文件在解决方案Chapter07中创建一个项目名为Program05的控制台应用程序,具体代码如例。点击查看7.5.2FileSt

温馨提示

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

评论

0/150

提交评论