One should "depend upon abstractions, [not] concretions.
The most basic example is the following, imagine the following implementation, while LINQ
does not exist:
/**
* Filter out all 0 items
*/
public IEnumerable<int> Filter(IEnumerable<int> array)