Pergunta sobre IEnumerable e IEnumerator

Eu uso o código a seguir para permitir que o myClass use foreach. Mas sou um pouco iniciante em programação e tenho alguma dificuldade em entender o código a seguir. Eu descrevi meus problemas nos comentários. Ficaria muito grato por fornecer algumas informações.

    public class MyClass : IEnumerable<string> 
    {  
    //1) What is IEnumerator for?
        // Whats the difference between IEnumerator and IEnumerable
    public IEnumerator<string> GetEnumerator()     
    {
             yield return "first";         
             yield return "second";     
    }      
    //2) What is it for?  It just calls above method 
   IEnumerator IEnumerable.GetEnumerator()
         {
             return GetEnumerator(); 
         } 
    }
   //3) Lastly what benefits I have from implementing genetic interface 
   //IEnumerable<string> instead of just IEnumerable

questionAnswers(6)

yourAnswerToTheQuestion