Lớp học như Stream
, StreamReader
, StreamWriter
vv cụ IDisposable
giao diện. Điều đó có nghĩa là, chúng ta có thể gọi Dispose()
phương thức trên các đối tượng của các lớp này. Họ cũng đã định nghĩa một public
phương thức gọi là Close()
. Bây giờ điều đó làm tôi bối rối, liệu tôi nên gọi cái gì khi tôi hoàn thành với đồ vật? Nếu tôi gọi cả hai thì sao?
Mã hiện tại của tôi là:
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream))
{
using (StreamWriter writer = new StreamWriter(filename))
{
int chunkSize = 1024;
while (!reader.EndOfStream)
{
char[] buffer = new char[chunkSize];
int count = reader.Read(buffer, 0, chunkSize);
if (count != 0)
{
writer.Write(buffer, 0, count);
}
}
writer.Close();
}
reader.Close();
}
}
Như bạn thấy, tôi đã viết các using()
cấu trúc, tự động gọi Dispose()
phương thức trên từng đối tượng. Nhưng tôi cũng gọi Close()
phương thức. Đúng không?
Vui lòng gợi ý cho tôi các thực tiễn tốt nhất khi sử dụng các đối tượng truyền phát. :-)
Ví dụ MSDN không sử dụng using()
cấu trúc và Close()
phương thức gọi :
Liệu nó có tốt không?
using (MemoryStream ms1 = new MemoryStream(), ms2 = new MemoryStream()) { }
. Ý tôi là như thế này nơi bạn có thể xác định lại loại:using (MemoryStream ms = new MemoryStream()) using (FileStream fs = File.OpenRead("c:\\file.txt")) { }