Collection Interface In .NET

Introduction

 
.NET framework provides interfaces that implement by collections in language to provide the functionality of iterating over objects in the collection, adding and removing an object from collection to randomly access an object from the collection.
 
As different interfaces provide a different set of functionality most of the developers have a problem when to use which interface to achieve functionality. The following post provides information about interfaces implemented by collection.
 

Interfaces

 
The following diagram is for the relation between the interfaces.
 
relation between the interfaces
 
Note:
  1. Class diagram is not having all the methods but contains an important method that belongs to each collection interface.
  2. Collection interface is available in both generic and non-generic form, so in the diagram, obj type is the object in nongeneric form and obj type is T(template type) in generic form.
  Functionality Provided Read Count Add
& Remove
Index-Based Read Index-Based Add & Remove
IEnumerable 1. Provide Read-only Collection.
 
2. Allow reading each object of the collection in forward-only mode.
Y N N N N
ICollection 1. Allow modifying collection.
 
2. Allow getting the size of the collection.
 
3. Allow to Add and Remove objects in/from the collection.
Y
(Inherited)
Y Y N N
IReadOnlyCollection 1. Allow reading collection.
 
2. Allow getting the size of the collection.
Y
(Inherited)
Y N N N
IList 1. Allows accessing collection by Index.
 
2. Allow to Add and Remove objects in/from the collection by index.
Y
(Inherited)
Y
(Inherited) 
Y
(Inherited) 
Y Y
IReadOnlyList
1. Allow reading collection by Index.
Y
(Inherited)
Y
(Inherited) 
N N Y
Note:
 
 
In the above diagram (Inherited), the columns indicate that the features are inherited from the parent, and to find out from which parent one must look in the interface collection diagram.
 
So from the above table, three main interfaces functionality concluded in the following way:
  1. IEnumerable – interface provides minimum functionality which is Enumration.
  2. ICollection – interface provides medium functionality which is getting size, adding, removing, and clearing collection i.e. modification of collection. As it inherited from IEnumerable so includes the functionality of IEnumerable. IList – interface provides full functionality which is index base accessing of collection element, index base adding, index base removing from the collection. As it inherited from ICollection it includes the functionality of Enumerable and ICollection.
The following are some important things to know:
  1. IEnumerable interface under the hood makes use of IEnumerator for providing read-only and forward mode read.
     
  2. IReadOnly*** and IEnumerable are used for providing read-only collections. But the difference is that IEnumerable allows the collection to read in a forward-only mode where IReadOnly*** provides the feature of Collection /List but only in read-only mode i.e. without modification feature like add & remove.
     
  3. IReadOnly is part of the collection interface from framework 4.5.
Above table list down the features provided by each interface when the collection gets converted to interface type or class implement interface to provide the feature of the collection.
 

Conclusion

 
It’s very important for developers to understand these interfaces because the rule says it's always good to depend on the interface rather than on the concrete type.