Rumah > pembangunan bahagian belakang > C++ > Close() atau Dispose(): Kaedah Yang Harus Saya Gunakan untuk Objek Strim?

Close() atau Dispose(): Kaedah Yang Harus Saya Gunakan untuk Objek Strim?

Patricia Arquette
Lepaskan: 2024-12-31 17:05:10
asal
513 orang telah melayarinya

Close() or Dispose(): Which Method Should I Use for Stream Objects?

Perlukah saya Panggil Close() atau Dispose() untuk Objek Strim?

Strim objek, seperti Strim, StreamReader dan StreamWriter, melaksanakan antara muka IDisposable. Mereka juga mempunyai kaedah awam yang dipanggil Close(). Perbezaan antara kaedah ini boleh mengelirukan.

Pelaksanaan Kaedah

Menggunakan Reflector.NET, kita boleh memeriksa pelaksanaan kaedah Close() untuk StreamWriter dan StreamReader:

// StreamWriter
public override void Close()
{
    this.Dispose(true);
    GC.SuppressFinalize(this);
}

// StreamReader
public override void Close()
{
    this.Dispose(true);
}
Salin selepas log masuk

Kaedah Dispose(bool disposing) untuk StreamReader:

protected override void Dispose(bool disposing)
{
    if ((this.Closable && disposing) && (this.stream != null))
    {
        this.stream.Close();
    }
    if (this.Closable && (this.stream != null))
    {
        this.stream = null;
        base.Dispose(disposing);
    }
}
Salin selepas log masuk

Begitu juga untuk StreamWriter, kaedah Close() hanya memanggil Dispose(true) secara dalaman.

Equivalence of Close() dan Dispose()

Daripada kod tersebut, ternyata anda boleh memanggil Close() dan Dispose() pada aliran tanpa menjejaskan tingkah laku mereka. Ia adalah kaedah yang setara.

Amalan Terbaik

Walaupun Close() dan Dispose() boleh ditukar ganti, adalah disyorkan untuk menggunakan:

  • menggunakan ( ... ) { ... }: Memudahkan pembersihan dan mengelakkan sumber kebocoran. Walau bagaimanapun, ia mungkin mengurangkan kebolehbacaan disebabkan pendakap kerinting bersarang.
  • gunakan (var stream = ...) { / kod / stream.Close(); }: Pendekatan ini menggabungkan faedah menggunakan ( ... ) { ... } dan secara eksplisit memanggil Close(). Ia meningkatkan kebolehbacaan dan memastikan pembersihan yang betul.

Kesimpulan

Sama ada hendak menggunakan Close() atau Dispose() adalah soal keutamaan dan kebolehbacaan. Kedua-dua kaedah disokong dan mempunyai fungsi yang setara untuk objek aliran. Amalan yang disyorkan ialah menggunakan menggunakan ( ... ) { ... } apabila boleh dan secara eksplisit memanggil Close() apabila perlu untuk meningkatkan kejelasan kod.

Atas ialah kandungan terperinci Close() atau Dispose(): Kaedah Yang Harus Saya Gunakan untuk Objek Strim?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan