2013-04-13 28 views
18

Tôi chỉ đang triển khai mẫu Vứt bỏ và khi tôi vừa nhập dòng GC.SuppressFinalize(this), tôi đã tự hỏi liệu có bao giờ sử dụng trường hợp để sử dụng một thông số nào khác không phải là this làm tham số cho phương thức hay không.Có trường hợp sử dụng nào không sử dụng "điều này" khi gọi GC.SuppressFinalize (điều này) không?

Đây là mô hình tiêu biểu:

public void Dispose() 
{ 
    Dispose(true); 
    GC.SuppressFinalize(this); // right here 
} 

Liệu nó bao giờ làm cho tinh thần để gọi GC.SuppressFinalize() với một cái gì đó khác hơn this?

public void Dispose() 
{ 
    Dispose(true); 
    GC.SuppressFinalize(foo); // should this ever happen? 
} 
+9

Thời gian duy nhất tôi có thể tưởng tượng rằng hữu ích là nếu bạn đang sử dụng một lớp bên thứ ba có trình kết thúc và phương thức Dispose() nhưng nó không tự gọi là 'GC.SuppressFinalize()' vì lý do nào đó. Sau đó, bạn về mặt lý thuyết có thể sửa chữa nó bằng cách gọi SuppressFinalize() cho đối tượng explicity sau khi bạn gọi là Dispose() cho nó. Nhưng điều đó nghe khá xa vời. –

+2

Tất nhiên có sử dụng, không phải là những thứ rất phổ biến. Trong những thứ như một hồ bơi đối tượng. Nhưng đó không phải là một câu hỏi hay cho SO. –

+1

Không có nhiều trường hợp thực sự. Cũng theo các câu hỏi trên thanh bên (Khi nào tôi nên sử dụng GC.SupressFinalize()?), Câu trả lời hàng đầu nói: Đừng bị cám dỗ để gọi SuppressFinalize trên các đối tượng khác tâm trí bạn. Đó là một lỗi nghiêm trọng chờ đợi xảy ra. –

Trả lời

2

Theo MSDN:

http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspx

Đó là trong thực tế có thể là ví dụ của bạn: GC.SuppressFinalize (foo) sẽ được sử dụng trong các tình huống nhất định, nhưng không phải trong kịch bản của mô hình vứt bỏ chung.

Ví dụ bạn có thể muốn viết một số loại mẫu quản lý vứt bỏ cho nhiều đối tượng thay vì thực hiện mẫu vứt bỏ chung từ bên trong đối tượng của bạn. một lựa chọn khác là nếu bạn muốn một đối tượng vẫn còn bị đàn áp và sau này có thể yêu cầu nó? không bao giờ làm điều đó .. nhưng có thể.

Vì vậy, có thể có .. có khả năng xảy ra không - và có thể không bao giờ.

Các vấn đề liên quan