la implementación de IEnumerable y IEnumerable.GetEnumerator () no puede ser pública, ¿por qué?

Para implementar un miembro de la interfaz, el miembro correspondiente de la clase implementadora debe ser público. fuente: Interfaces (Guía de progtwigción C #)

Sé que funciona si es privado, pero me gustaría entender por qué no puede ser público.

debe ser la implementación de la interfaz privada

Cuando se implementan explícitamente, los métodos de interfaz son públicos por defecto y es por eso que no puede usar modificadores de acceso.

Una cita de msdn.com:

Cuando un miembro se implementa explícitamente, no se puede acceder a él a través de una instancia de clase, sino solo a través de una instancia de la interfaz (que es pública de forma predeterminada)

fuente: https://msdn.microsoft.com/en-us/library/aa288461%28v=vs.71%29.aspx

Diferencia de PS entre implementación implícita y explícita:

 interface MyInterface { void MyMethod(); } class A : MyInterface // Implicit implementation { public void MyMethod () { ... } } class B: MyInterface // Explicit implementation { void MyInterface.MyMethod () { ... } }