Por que o conceito de "Covariância" e "Contravariância" são aplicáveis ao implementar os métodos de uma interface?

O caso de uso é algo parecido com isto:

public class SomeClass : ICloneable
{
    // Some Code

    // Implementing interface method
    public object Clone()
    {
        // Some Clonning Code
    }
}

Agora minha pergunta éPor que não é possível usar "SomeClass (como é derivado do objeto)" como um tipo de retorno do método Clone () se considerarmos os Funda's of Covariance and Contravariance?

Alguém pode me explicar a razão por trás desta implementação da Microsoft ????

questionAnswers(6)

yourAnswerToTheQuestion