Interface avec le paramètre générique vs Interface avec les méthodes génériques

Disons que j'ai une telle interface et la mise en œuvre concrète

public interface IMyInterface<T>
{
    T My();
}

public class MyConcrete : IMyInterface<string>
{
    public string My()
    {
        return string.Empty;
    }
}

J'ai donc créer MyConcrete mise en œuvre pour strings, je peux en avoir un de plus concret à la mise en œuvre de int. Et c'est ok. Mais disons, que je veux faire la même chose, mais avec des méthodes génériques, j'ai donc

public interface IMyInterface2
{
    T My<T>();
}

public class MyConcrete2 : IMyInterface2
{
    public string My<string>()
    {
        throw new NotImplementedException();
    }
}

Donc, j'ai le même IMyInterface2, mais qui définit le comportement générique par le biais de T My<T>(). Dans ma classe de béton je veux mettre en œuvre My comportement, mais pour le béton de type de données string. Mais le C# ne m'autorise pas à le faire.

Ma question est: pourquoi je ne peut pas le faire?
En d'autres termes, si je peux créer une mise en œuvre concrète de MyInterface<T> comme MyClass : MyInterface<string> et arrêter le caractère générique à ce point, pourquoi je ne peux pas le faire avec la méthode générique - T My<T>()?

  • Vous ne pouvez pas réduire les capacités lorsque vous héritez, vous pouvez uniquement ajouter à eux.