implementar IEnumerable <T> e IEnumerable.GetEnumerator () não pode ser público, por que?
Para implementar um membro da interface, o membro correspondente da classe de implementação deve ser público. fonte:Interfaces (Guia de Programação em C #)
Sei que funciona se for privado, mas gostaria de entender por que não pode ser público?