Tôi hiện đang trong quá trình cố gắng thành thạo C #, vì vậy tôi đang đọc Mã thích ứng thông qua C # của Gary McLean Hall .
Ông viết về các mẫu và chống mẫu. Trong phần triển khai so với phần giao diện, ông viết như sau:
Các nhà phát triển chưa quen với khái niệm lập trình cho giao diện thường gặp khó khăn trong việc buông bỏ những gì đằng sau giao diện.
Tại thời điểm biên dịch, bất kỳ ứng dụng khách nào của giao diện sẽ không có ý tưởng nào về việc triển khai giao diện mà nó đang sử dụng. Kiến thức như vậy có thể dẫn đến các giả định không chính xác khiến cho khách hàng thực hiện giao diện cụ thể.
Hãy tưởng tượng ví dụ phổ biến trong đó một lớp cần lưu một bản ghi trong bộ lưu trữ liên tục. Để làm như vậy, nó ủy quyền một cách chính xác cho một giao diện, ẩn các chi tiết của cơ chế lưu trữ liên tục được sử dụng. Tuy nhiên, sẽ không đúng khi đưa ra bất kỳ giả định nào về việc triển khai giao diện nào đang được sử dụng trong thời gian chạy. Ví dụ, truyền tham chiếu giao diện cho bất kỳ triển khai nào luôn là một ý tưởng tồi.
Nó có thể là rào cản ngôn ngữ hoặc thiếu kinh nghiệm của tôi, nhưng tôi không hiểu điều đó có nghĩa là gì. Đây là những gì tôi hiểu:
Tôi có một dự án vui vẻ thời gian rảnh để thực hành C #. Ở đó tôi có một lớp học:
public class SomeClass...
Lớp học này được sử dụng ở rất nhiều nơi. Trong khi học C #, tôi đọc rằng tốt hơn là trừu tượng hóa với một giao diện, vì vậy tôi đã thực hiện như sau
public interface ISomeClass <- Here I made a "contract" of all the public methods and properties SomeClass needs to have.
public class SomeClass : ISomeClass <- Same as before. All implementation here.
Vì vậy, tôi đã đi vào tất cả các tài liệu tham khảo lớp và thay thế chúng bằng ISomeClass.
Ngoại trừ trong việc xây dựng, nơi tôi đã viết:
ISomeClass myClass = new SomeClass();
Tôi có hiểu chính xác rằng điều này là sai? Nếu có, tại sao vậy, và tôi nên làm gì thay thế?
ISomeClass myClass = new SomeClass();
? Nếu bạn thực sự muốn nói điều đó, đó là đệ quy trong công cụ xây dựng, có thể không phải là điều bạn muốn. ?
ISomeClass
), nhưng cũng dễ dàng tạo ra các giao diện quá chung chung mà không thể viết mã hữu ích vào thời điểm đó là các tùy chọn duy nhất là để suy nghĩ lại giao diện và viết lại mã hoặc để downcast.