C # Covariance de type retour: limitations et solutions
.NET Le développement du site Web nécessite souvent des types de pages personnalisés. L'accès à ces pages à partir de contrôles peut être problématique, sauf si le type de page par défaut est remplacé par un type personnalisé. Cependant, C # ne prend pas directement en charge la covariance de type rendement, empêchant un simple remplacement d'une méthode de classe de base pour renvoyer un type plus spécialisé. Cette limitation nécessite une solution de contournement.
Le défi: surestimant directement une méthode de classe de base pour renvoyer un type dérivé n'est pas autorisé en C #.
Stratégie de renforcement:
La solution consiste à utiliser une méthode de classe de base abstraite et une méthode de classe dérivée en béton qui exploite un modificateur new
pour obtenir un effet similaire. Cette approche maintient des saisies plus fortes lorsqu'ils traitent des types de temps de compilation.
Exemple d'implémentation:
<code class="language-csharp">abstract class Enclosure { protected abstract Animal GetContents(); public Animal Contents() { return this.GetContents(); } } class Aquarium : Enclosure { protected override Animal GetContents() { return this.Contents(); } public new Fish Contents() { /* ... implementation to return a Fish object ... */ } }</code>
Ce modèle permet de remplacer la méthode virtuelle GetContents()
tout en fournissant un type de retour plus spécifique (Fish
) via la méthode Contents()
dans la classe dérivée (Aquarium
). Le mot clé new
indique explicitement que la classe dérivée crée une nouvelle méthode, sans remplacer la méthode de la classe de base. Cela réalise efficacement le comportement souhaité tout en adhérant aux contraintes du système de type C #.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!