Comment retourner sous-type de méthode de remplacement de la sous-classe en C#?

J'ai une sous-classe avec un dessus en proie à la méthode que je sais retourne toujours un sous-type particulier de le type de retour déclaré dans la classe de base. Si j'écris le code de cette façon, il ne compile pas. Depuis que, probablement, n'a pas de sens, permettez-moi de donner un exemple de code:

class BaseReturnType { }
class DerivedReturnType : BaseReturnType { }

abstract class BaseClass {
    public abstract BaseReturnType PolymorphicMethod();
}

class DerivedClass : BaseClass {
    //Compile Error: return type must be 'BaseReturnType' to match 
    //overridden member 'BaseClass.PolymorphicMethod()'
    public override DerivedReturnType PolymorphicMethod() { 
        return new DerivedReturnType(); 
    }
}

Est-il un moyen pour accomplir cette en C#? Si non, quelle est la meilleure façon d'obtenir quelque chose de similaire? Et pourquoi n'est-il pas permis? Il ne semble pas permettre à toute incohérence logique, puisque tout objet retourné à partir de la plus en proie à la méthode encore is BaseReturnType. Peut-être il ya quelque chose que je n'avais pas considéré comme bien. Ou peut-être la raison est technique ou historique.

  • Que fait le compilateur dire?
  • J'ai compris l'erreur de compilation que de l'observation.
InformationsquelleAutor recursive | 2009-01-07