终于有时间来完成这个系列的最后一篇关于C#中异常,文件流对象,序列化,多线程问题的总结。
首先就来看关于异常的相关知识吧
一,异常
首先区分三个概念:警告,异常和错误。不管对于编程新手或者是老手对这三个概念都应该是非常熟悉,且是经常遇到的。
- 警告:在程序中出现,对于程序的执行没有影响。
- 异常:在运行的时候发生,一旦发生程序就会停止。
- 错误:一直是 指程序不符合语法规范。
在C#中的标准抛出异常的语句如下:
try { //尝试执行的语句 } catch (Exception) { //抛出异常的语句 throw; } finally { //最终执行的语句 }
关于try....catch语句最常见的问题就是try中的语句是在finally之前返回还是在之后返回。
看如下的代码:
public int Test() { int i = 1; int k = 0; int m = 1; try { //尝试执行的语句 //int n = i / k; return m; } catch (Exception) { //抛出异常的语句 throw; } finally { //最终执行的语句 m=m+2; } }
当我们在Main()方法中调用Test()方法时,返回值是什么呢?答案是:1。那么这是为什么呢?
这就要借助我们反编译工具了,反编译代码如下:
由上我们可以看出在try中return的值会先保存在.NET FramWork自动生成的变量中,并在finally后返回。
finally语句在最后执行,只过不返回的是在try中要return的值,而return的状态也发生在finally执行之后。
二,文件流对象
文件流对象就是指FileStream对象,该对象主要用于大文件的操作。我们先来看一段示例代码,来使用该对像来拷贝一个大文件
//读文件 public string FileCopy() { //创建一个文件流对象并给这个文件流对象指定操作文件的路径和文件的操作方式 FileStream stream = new FileStream(@"c:\2.txt",FileMode.Open); //准备一个byte数组以供文件流对象来读取数据并放到数组里面 //public override int Read(byte[] array, int offset, int count);主要是StreamFile对象的Read方法只有一种方法 byte[] buffer=new byte[1024*1024]; //调用文件流的读取数据的方法,将读取出来的字节放到buffer数组中 stream.Read(buffer, 0, buffer.Length); //将字节数组以指定的编码转换为字符串 string str= Encoding.Default.GetString(buffer); //释放资源 stream.Dispose(); return str; } //写文件 public void FileWrite(string str) { FileStream strWrite = new FileStream(@"d:\2.txt", FileMode.Create); //将字符串转换为指定编码的字节数组 byte[] buffer = Encoding.UTF8.GetBytes(str); //写对象 strWrite.Write(buffer, 0, buffer.Length); strWrite.Dispose(); }
过程如下:
三,.NET的序列化问题
序列化主要是为了保存对象的状态,将它们持久化到某个设备上(如:硬盘);
比如我们现在要保存对象属性的状态,看下买你的代码:
时间: 2024-10-18 21:13:25