Maison >développement back-end >C++ >La covariance de type C # supporte-t-elle?
C # RETOUR TYPE CO -CHANGES: IN -DEPTH DISCUSSE
Dans la programmation orientée objet, les développeurs doivent souvent obtenir des informations de type plus précises lors de la réécriture des méthodes. Retour au type de collaboration est un concept, qui permet aux sous-classes de renvoyer un type plus spécifique que la classe de base. Mais C # prend-il en charge cette fonctionnalité puissante?
C # Position sur le type de squelette Co -changes
Bien que la langue comme C soit largement utilisée dans la coordination du type de retour, malheureusement, C # ne le prend pas en charge nativement. Il s'agit de la restriction fondamentale de l'exécution du code C # - lorsque la langue publique est en cours d'exécution (CLR).
Type Problèmes de sécurité
C # ne prend pas en charge une raison pour le retour des types de collaboration est le type de sécurité. Permettre aux sous-classes de retourner des types plus spécifiques que les classes de base peut provoquer des erreurs d'incohérence et d'exécution inattendues. Le mécanisme d'inspection de type strict du CLR garantit que l'objet est systématiquement traité dans tout le système, et l'introduction du changement de coordination de type de retour détruira cette stabilité. Solution
Bien que C # ne soutienne pas directement la coordination du type de retour, les développeurs peuvent toujours obtenir des effets similaires grâce à d'autres méthodes. Une technologie couramment utilisée consiste à introduire des méthodes auxiliaires protégées dans la classe de base. Ces méthodes fournissent une couche indirecte qui permet aux sous-classes de renvoyer un type plus spécifique, tout en maintenant la sécurité du type:
Dans cet exemple, la classe d'aquarium réécrit la méthode protégée GetContents () et fournit une nouvelle méthode de contenu public (). .
Dernier progrès: la coordination en C # 9.0 retourne
<code class="language-c#">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() { ... } }</code>
Cependant, la situation change. Dans le C # 9.0 récemment publié, Microsoft a introduit une fonctionnalité intitulée "Cooperative Change" comme étape en tant qu'étape pour soutenir progressivement le type de collaboration. Tant qu'il s'agit d'un type de paramètres de l'interface ou de la méthode de base, cette fonction permet aux développeurs de spécifier des types de retour plus spécifiques pour la méthode de réécriture. Bien qu'il s'agisse d'une amélioration majeure, elle ne peut toujours pas atteindre toutes les fonctions d'une coordination complète du type de retour.
Si vous rencontrez une situation de Retour de type co-propulse à votre code, vous pouvez envisager d'explorer d'autres langues qui prennent en charge cette fonctionnalité, telles que C / CLI ou F #.
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!