This page is a work in progress.You can help improve it. →



We have seen several types of collections of data, including List, Dictionary, and Queue. C# has many others as well. These include SortedList, Stack, HashSet, and LinkedList.

So how can C# know how to use foreach and other methods that work for all of these different types? C# uses interfaces.


An interface is a description of a set of behaviors that a type can have. The interface defines the behaviors that a type must have, and the type must implement these. Later on, we'll learn that methods implement these behaviors. An interface describes a set of methods.

Interface Example

Let's use a real-world example to get an idea of what interfaces are. We'll use the example of an Animal.

We know all Animals have certain behaviors, such as eat, sleep, and breathe. However, all animals have different ways of doing these.

We could define an "interface" that describes these generic behaviors and call this an IAnimal. Notice the I in the name. The I indicates that this is an Interface. We can't make an instance of an IAnimal; it wouldn't be able to do anything.

However, we could create a Bear and a Cat and Human and say that they all have the behaviors of anIAnimal. The IAnimal is a generic type and the Bear and Cat and Human are concrete types.

We could code our software to use an IAnimal, and we wouldn't care if our code received a Bear or a Cat or a Human. We would be able to say that they have the behaviors of an IAnimal.

In fact, in other languages, this is known as duck typing! This name comes from the phrase: If it walks like a duck, quacks like a duck, and looks like a duck, it must be a duck. In our case if it eats and sleeps and breathes like an IAnimal, it must be an IAnimal.

In our work, we'll be using interfaces more than we will be creating them. They are a compelling language feature and is the type of tool you'll use more as you grow in your programming skills.


You may have noticed when adding a using statement to the top of your code, List, and Dictionary, and Queue come from using System.Collections.Generic. There is that Generic word again.

In a later lesson, we'll learn about a C# feature named LINQ, and we will see that List, Dictionary, and Queue all adhere to the IEnumerable interface. And since all these types are IEnumerable, LINQ can work with each.

© 2017 - 2021; Built with ♥ in St. Petersburg, Florida.