A Magia das Interfaces – IEnumerable

A missão de hoje é entender a existência de duas interfaces diferentes definidas na biblioteca de classes .NETFW. Vamos lá:

Definição

O .NETFW oferece duas versões de IEnumerable não-genérica e não há uma IEnumerable T tipo genérico para manipular coleções.

A versão genérica e de tipo ‘seguro’ chamado IEnumerable T, está localizado no namespace System.Collections.Generic.

A Definição

A definição do tipo IEnumerable:


public interface IEnumerable
{
    IEnumerator GetEnumerator();
}

Note como o C# implementa esse grupo de coleção.

A IEnumerable contém somente uma definição do método. O GetEnumerator() retorna uma instância de um objeto de uma classe que implementa a IEnumerator.

Para mais detalhes sobre métodos e propriedades. Consulte a documentação da MSDN.

IEnumerable T

Agora a versão genérica:


public interface IEnumerable<out T> : IEnumerable
{
    IEnumerator<T> GetEnumerator();
}

Note que ela se difere da versão não-genérico.

Note que a IEnumerable T herda de IEnumerable. Ou seja, um tipo que implementa IEnumerable T também tem deve implementar os membros de IEnumerable.

A IEnumerable T define apenas um método GetEnumerator que retorna uma instância de um objeto que implementa a IEnumerator T.

O método foreach do C # trabalha com todos os tipos que implementam a IEnumerable. E em C # podemos trabalhar com objetos que não explicitamente implementam IEnumerable ou IEnumerable T, podemos fazer foreach em qualquer coleção.

 

Leave a Reply

Your email address will not be published. Required fields are marked *