Hãy thử suy nghĩ bên ngoài hộp với / bằng logic và hiểu rõ ba giao diện này trong câu hỏi của bạn:
Khi lớp của một số thể hiện thực hiện giao diện System.Collection.IEnumerable, nói một cách đơn giản, chúng ta có thể nói rằng cá thể này có thể đếm được và lặp lại được, điều đó có nghĩa là cá thể này cho phép bằng cách nào đó trong một vòng lặp đi / get / pass / traverse / lặp đi lặp lại / thông qua tất cả các mục và thành phần mà thể hiện này chứa.
Điều này có nghĩa là điều này cũng có thể liệt kê tất cả các mục và thành phần mà thể hiện này chứa.
Mỗi lớp thực hiện giao diện System.Collection.IEnumerable cũng thực hiện phương thức GetEnumerator không có đối số và trả về một thể hiện System.Collections.IEnumerator.
Giao diện của System.Collections.IEnumerator hoạt động rất giống với các trình lặp C ++.
Khi lớp của một số thể hiện thực hiện giao diện System.Collection.ICollection, nói một cách đơn giản, chúng ta có thể nói rằng thể hiện này là một số tập hợp các thứ.
Phiên bản chung của giao diện này, tức là System.Collection.Generic.ICollection, có nhiều thông tin hơn vì giao diện chung này nêu rõ loại hình của những thứ trong bộ sưu tập.
Đây là tất cả hợp lý, hợp lý, hợp lý và hợp lý khi giao diện System.Collections.ICollection thừa hưởng từ giao diện System.Collections.IEnumerable, bởi vì về mặt lý thuyết, mọi bộ sưu tập cũng có thể đếm được và lặp lại và về mặt lý thuyết là có thể vượt qua tất cả các mục và phần tử trong mọi bộ sưu tập.
Giao diện System.Collections.ICollection đại diện cho một bộ sưu tập động hữu hạn có thể thay đổi, có nghĩa là các mục tồn tại có thể được xóa khỏi bộ sưu tập và các mục mới có thể được thêm vào cùng một bộ sưu tập.
Điều này giải thích tại sao giao diện System.Collections.ICollection có các phương thức "Thêm" và "Xóa".
Bởi vì các phiên bản của giao diện System.Collections.ICollection là các bộ sưu tập hữu hạn nên từ "hữu hạn" ngụ ý rằng mọi bộ sưu tập của giao diện này luôn có số lượng mục và phần tử hữu hạn trong đó.
Giao diện Count of System.Collections.ICollection có thể trả về số này.
Giao diện System.Collections.IEnumerable không có các phương thức và thuộc tính này mà giao diện System.Collections.ICollection có, bởi vì nó không có ý nghĩa gì khi System.Collections.IEnumerable sẽ có các phương thức và thuộc tính này mà giao diện System.Collections.ICollection có.
Logic cũng nói rằng mọi trường hợp cả vô số và lặp lại không nhất thiết phải là một bộ sưu tập và không nhất thiết phải thay đổi.
Khi tôi nói có thể thay đổi, tôi có nghĩa là đừng nghĩ ngay rằng bạn có thể thêm hoặc xóa thứ gì đó khỏi thứ gì đó có thể đếm được và lặp lại được.
Ví dụ, nếu tôi chỉ tạo một số số nguyên tố hữu hạn, thì số thứ tự hữu hạn này thực sự là một thể hiện của giao diện System.Collections.IEnumerable, bởi vì bây giờ tôi có thể đi qua tất cả các số nguyên tố trong chuỗi hữu hạn này trong một vòng lặp và làm bất cứ điều gì tôi muốn làm với từng người trong số họ, như in từng người trong số họ ra cửa sổ hoặc màn hình điều khiển, nhưng chuỗi số nguyên tố hữu hạn này không phải là một phiên bản của giao diện System.Collections.ICollection, vì điều này không có ý nghĩa gì với thêm số tổng hợp vào dãy số hữu hạn này.
Ngoài ra, bạn muốn trong lần lặp tiếp theo để có được số nguyên tố lớn nhất gần nhất tiếp theo với số nguyên tố hiện tại trong lần lặp hiện tại, nếu vậy bạn cũng không muốn xóa các số nguyên tố tồn tại khỏi dãy số nguyên tố hữu hạn này.
Ngoài ra, bạn có thể muốn sử dụng, viết mã và viết "lợi nhuận" trong phương thức GetEnumerator của giao diện System.Collections.IEnumerable để tạo ra các số nguyên tố và không phân bổ bất cứ thứ gì trên đống bộ nhớ và sau đó giao nhiệm vụ cho Garbage Collector (GC) cho cả hai giải phóng và giải phóng bộ nhớ này khỏi heap, vì điều này rõ ràng vừa lãng phí bộ nhớ hệ điều hành vừa làm giảm hiệu năng.
Việc phân bổ và giải quyết bộ nhớ động trên heap nên được thực hiện khi gọi các phương thức và thuộc tính của giao diện System.Collections.ICollection, nhưng không phải khi gọi các phương thức và thuộc tính của giao diện System.Collections.IEnumerable (mặc dù giao diện System.Collections.IEnumerable chỉ có 1 phương thức và 0 thuộc tính).
Theo những gì người khác nói trong trang web Stack Overflow này, giao diện đơn giản System.Collections.IList đại diện cho một orderable bộ sưu tập có và điều này giải thích tại sao các phương thức của giao diện System.Collections.IList hoạt động với các chỉ mục trái ngược với các giao diện System.Collections.ICollection.
Trong giao diện System.Collections.ICollection ngắn không ngụ ý rằng một phiên bản của nó có thể được sắp xếp theo thứ tự, nhưng giao diện System.Collections.IList không ngụ ý điều đó.
Bộ theo thứ tự lý thuyết là trường hợp đặc biệt của bộ không có thứ tự.
Điều này cũng có ý nghĩa và giải thích tại sao giao diện System.Collections.IList thừa hưởng giao diện System.Collections.ICollection.
List
sẽ tốt hơn rất nhiều, phải không?