Phần đầu tiên của câu hỏi được đề cập trong các bài đăng khác, nhưng tôi không thấy ví dụ. Tôi thường sử dụng điều này khi thực hiện các giao diện chung và các đối tác không chung chung của chúng. Ví dụ, nếu tôi muốn tạo một ObservableList chung, tôi muốn thực hiện cả hai giao diện IList.
Public Class ObservableList(Of T)
Implements INotifyCollectionChanged,
IList,
IList(Of T)
End Class
Khi cả hai ILists được triển khai, chúng tôi sẽ có rất nhiều chức năng trùng lặp. Một số chia sẻ cùng một chữ ký và có thể thực hiện cả hai chức năng IList như Clear. Nhưng một số hàm không chung chung đối phó với các đối tượng thay vì chung chung. Vì vậy, đối với hàm Add, tôi sẽ làm cho cả hai việc triển khai hoạt động, nhưng đặt phiên bản không chung chung riêng tư để làm cho việc sử dụng lớp dễ dàng hơn.
Public Sub Add(item As T) Implements System.Collections.Generic.ICollection(Of T).Add
'Add item to collection
End Sub
Private Function Add1(item As Object) As Integer Implements System.Collections.IList.Add
'Add item to collection
End Function
Bằng cách này, lớp này có thể được chuyển và được sử dụng làm IList, nhưng trình mã hóa sẽ sử dụng nó làm IList (T) mà không bị quá tải.
Nguồn
2012-07-12 14:04:37
Vì vậy, mã đó hoạt động? Tôi ngạc nhiên. Dường như rất trái với ý tưởng của một giao diện. – jcollum