通常我们需要open一个东西,这个东西用完了,就需要Close。这样才符合真正的逻辑世界。有开必有关嘛。
但人有惰性,经常写着写着就忘了close了。 另外一个,老是写一个close,每一样东西都要写close,多么的麻烦。有时候,为了给下面的类添加close,于是设计了IClosable这个接口,于是所有继承它的类,都必须实现close方法了。
假如A,B,C都实现了IClosable,于是我们将他们放到集合中一起管理。 于是CloseManager,这里面维护一个IClosable的列表,然后遍历,把每个都关了。
你会发现,写个东西,有时候真麻烦的,你要增加IClosable接口,你发现要增加很多东西。
于是,一种懒人方法是,像C#那样,采用using的方式,这样编译器编译的时候自动帮你增加一行代码,这行代码负责帮你close。
System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
// Get the response instance.
System.Net.WebResponse wResp = wReq.GetResponse();
System.IO.Stream respStream = wResp.GetResponseStream();
// Dim reader As StreamReader = New StreamReader(respStream)
using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type)))
{
return reader.ReadToEnd();
}
在Java中,也提供类似手段,就是try(xxxx)的时候呢,会帮你close。
这种手段需要编译器来提供支持。 编译器很好。