三、finally? 解决释放问题的方法依靠你现在使用的语言。在C++中,你可以使用构建于堆栈上的析构函数。Java中,你能构使用finally程序块。C#允许你创造自定义的结构类型但是不允许结构中的析构函数(只是因为一个C#析构函数其实是一个Finally方法,Finally被垃圾回收器调用。结构类,是一种值类型,并不归属于垃圾回收器回收的范围)。因而,只是在开始,C#必须追循Java的道路,使用finally程序块。首先,我们的finally程序块开起来如下: private static char[] ReadSource(string filename) { try { FileInfo file = new FileInfo(filename); int length = (int)file.Length; char[] source = new char[length]; TextReader reader = file.OpenText(); reader.Read(source, 0, length); } finally { reader.Close(); } return source; } 这个版本不得不引入一个try程序块(既然一个finally程序快必须跟随在一个try程序块后),这将是一个合理的解决方案,如果它奏效的话。但是,它没有做到。问题是try程序块构建成一个范围,所以在finally程序块中的reader并不在这个范围内并且返回语句中的source也不在这个范围。 finally? 为了解决这个问题,你不得不将reader和source的声明移到try程序块的外面,第二次尝试如下: private static char[] ReadSource(string filename) { TextReader reader; char[] source; try { FileInfo file = new FileInfo(filename); int length = (int)file.Length; source = new char[length]; reader = file.OpenText(); reader.Read(source, 0, length); } finally { reader.Close(); } return source; }
|
正在阅读:C#中的异常处理(二)C#中的异常处理(二)
2004-02-14 09:34
出处:PConline
责任编辑:linjixiong
键盘也能翻页,试试“← →”键