Bắt đầu từ tình hình follwing:Khai báo IDisposable cho lớp hoặc giao diện?
public interface ISample
{
}
public class SampleA : ISample
{
// has some (unmanaged) resources that needs to be disposed
}
public class SampleB : ISample
{
// has no resources that needs to be disposed
}
Các SampleA lớp nên thực hiện IDisposable giao diện cho giải phóng tài nguyên. Bạn có thể giải quyết việc này theo hai cách:
1. Thêm giao diện cần thiết cho SampleA lớp:
public class SampleA : ISample, IDisposable
{
// has some (unmanaged) resources that needs to be disposed
}
2. Thêm nó vào ISample giao diện và lực lượng có nguồn gốc lớp học để thực hiện nó:
public interface ISample : IDisposable
{
}
Nếu bạn đặt nó vào giao diện, bạn buộc phải triển khai thực hiện IDisposable ngay cả khi chúng không có gì để vứt bỏ. Mặt khác, nó là rất rõ ràng để thấy rằng việc thực hiện cụ thể của một giao diện đòi hỏi một vứt bỏ/sử dụng khối và bạn không cần phải cast như IDisposable để làm sạch. Có thể có một số ưu/nhược điểm khác trong cả hai cách ... tại sao bạn đề nghị sử dụng một cách ưu tiên cho cách khác?
Có khả năng mã được viết dựa trên giao diện (có lẽ là được giao cho một cá thể đã được xây dựng) có trách nhiệm * kết thúc * thời gian hữu ích (hữu ích) của cá thể đó? –
@Damien_The_Unbeliever: Ok, giả sử ISample xuất phát từ kết quả của phương thức factory hoặc thông qua Dependency Injection. – Beachwalker
Đó là điều - nếu nó * là * đến từ một nhà máy, thì có khả năng mã của bạn * là * chịu trách nhiệm xử lý - vì vậy tôi sẽ đặt nó trên Giao diện. Nhưng nếu nó được tiêm thì tôi giả định rằng vòi phun chịu trách nhiệm cho cả đời, vì vậy nó sẽ không * phù hợp với giao diện - Tôi không nghĩ rằng có một câu trả lời một kích thước phù hợp cho câu hỏi. –