Hàm huỷ destructor là một trong hàm member của lớp (phương thức) có công dụng ngược cùng với hàm tạo thành constructor. Hàm huỷ được call trước lúc giải pđợi (xoá bỏ) một đối tượng người dùng nhằm tiến hành một số trong những công việc gồm tính “dọn dẹp” trước khi đối tượng được huỷ quăng quật, ví dụ như giải pngóng một vùng nhớ nhưng mà đối tượng sẽ quản lý, xoá đối tượng người sử dụng khỏi screen nếu như nó đang hiển thị,…

– Nếu trong lớp không định nghĩa hàm huỷ, thì một hàm huỷ mang định không làm những gì cả được phát sinh. Đối với tương đối nhiều lớp thì hàm huỷ khoác định là đủ, và ko cần đưa vào trong 1 hàm huỷ mới.

Bạn đang xem:

– Một Destructor vào C# là một hàm thành viên sệt biệt:

Có tên giống như với tên class, với bao gồm thêm lốt ngã ~ nghỉ ngơi trước. Chẳng hạn: ~Car() , ~Student(),…Không có mức giá trị trả về, rất có thể có hoặc không tồn tại tham số.

– Cú pháp knhì báo:

~TênLớp()// cleanup statements– lấy ví dụ :


Destructor tất cả một trong những Điểm sáng như sau:

Được điện thoại tư vấn mang đến trước khi một đối tượng người tiêu dùng bị tịch thu. Rất bổ ích để giải pđợi tài nguyên ổn bộ nhớ trước lúc dứt công tác.Không được hướng dẫn và chỉ định phạm vi truy cập.Không được thừa kế (inherited) hoặc nạp chồng (overloaded).Mỗi lớp chỉ bao gồm tốt nhất một phương thức destructor.Destructor quan yếu được Gọi từ bỏ đối tượng người sử dụng, mà lại nó sẽ tiến hành gọi ngầm một cách auto.Destructor chỉ tất cả trong kiểu dáng class, mà không có trong dạng hình struct.

Xem thêm: Công Thức Tính Nửa Chu Vi Hình Chữ Nhật Lớp 4, Công Thức Tính Chu Vi Và Diện Tích Hình Chữ Nhật

Lưu ý:

Empty destructors should not be used.Nếu destructor là trống rỗng (empty – không tồn tại nội dung) thì không nên sử dụng. Vì khi 1 class có đựng cách làm destructor thì khi đó một entry sẽ được chế tạo vào queue (mặt hàng đợi) của Finalize.khi destructor được Điện thoại tư vấn thì Garbage Collector (GC) được điện thoại tư vấn nhằm xử trí. Do này mà tạo ra một tổn định thất ko quan trọng về năng suất của chương trình.Vì vậy giả dụ không tồn tại giải pháp xử lý gì quan trọng nhằm giải pchờ vùng lưu giữ thì ko knhì báo cách tiến hành destructor.

Destructor ngầm định Điện thoại tư vấn Finalize bên trên base class (lớp các đại lý, lớp cha) của đối tượng người dùng (object). Do đó, code minc họa destructor làm việc bên trên sẽ được implicitly translated (biến đổi ngầm định) nhỏng sau:


Cho phnghiền một object miễn phí resources và triển khai các operations cleanup không giống, trước khi nó bị thu hồi vị GC (Garbage Collection)

– Syntax C#:

protected virtual void Finalize()– Remarks:

Phương thơm thức Finalize() được thực hiện để tiến hành những chuyển động cleanup bên trên resources không được làm chủ (unmanaged), không được thực hiện đang được sở hữu bởi current object, trước lúc object is destroyed.Access modifier của thủ tục là protected, do đó chỉ hoàn toàn có thể access thông qua class này hoặc thông qua 1 derived class (lớp dẫn xuất, lớp con).

– Điều này Tức là method Finalize() sẽ tiến hành hotline đệ quy cho tất cả các instances vào một chuỗi bao gồm quan hệ giới tính kế thừa (inherited): từ derived class cuối cùng tuyệt nhất đến base class đầu tiên nhất (from the most-derived class – to the least-derived class). Để phát âm hơn về điều này thì họ thuộc xem ví dụ sau đây:


using System;namespace MinhHoangBlog class Program static void Main(string<> args) // Chỉ khởi chế tạo đối tượng của class ThirdThird t = new Third(); // Thực hiện những giải pháp xử lý...... // Giải pchờ object t = null; GC.Collect(); Console.Read(); class First// Constructorpublic First()System.Diagnostics.Trace.WriteLine("First"s object was created.");// Destructor~First()System.Diagnostics.Trace.WriteLine("First"s destructor was called.");class Second : First// Constructorpublic Second()System.Diagnostics.Trace.WriteLine("Second"s object was created.");// Destructor~Second()System.Diagnostics.Trace.WriteLine("Second"s destructor was called.");class Third : Second// Constructorpublic Third()System.Diagnostics.Trace.WriteLine("Third"s object was created.");// Destructor~Third()System.Diagnostics.Trace.WriteLine("Third"s destructor was called.");

*
Kết quả cmùi hương trình


– Ở ví dụ trên tạo nên 3 classes mà lại tiến hành một chuỗi những quá kế (chain of inheritance):

class First là lớp các đại lý (base class),class Second kế thừa trường đoản cú class First,và class Third thừa kế từ class Second.

– Trong từng class First, Second, Third sẽ tạo nên ra một destructor, trong hàm main() chỉ tạo thành instance của class dẫn xuất cuối cùng là class Third (có nghĩa là the most-derived class).

– Lúc chạy chương trình, thì cách làm destructor của 2 class First, Second cũng được Điện thoại tư vấn một phương pháp trường đoản cú động trong chuỗi thừa kế, và theo đồ vật tự: the most-derived class => the least-derived class, Tức là được destructor theo thứ tự là: Third> => Second> => First>.