Partager via


Erreurs et avertissements liés aux déclarations de type partial et de membre partial

Vous pouvez rencontrer les erreurs suivantes liées aux déclarations de type partial et de membre partial :

  • CS0260: Modificateur partial manquant sur la déclaration du type ; une autre déclaration partial de ce type existe
  • CS0261: Les déclarations partial du type doivent être toutes des classes, toutes des structs ou toutes des interfaces
  • CS0262: Les déclarations partial du type ont des modificateurs d’accessibilité conflictuels
  • CS0263: Les déclarations partial du type ne doivent pas spécifier des classes de base différentes
  • CS0264: Les déclarations partial du type doivent avoir les mêmes noms de paramètres de type dans le même ordre
  • CS0265: Les déclarations partial du type ont des contraintes incohérentes pour le paramètre de type « paramètre de type »
  • CS0267 : Le modificateur « partial » ne peut apparaître qu’immédiatement avant « class », « record », « struct », « interface » ou un type de retour de méthode.
  • CS0282 : Il n’y a pas d’ordre défini entre les champs dans les déclarations multiples de la classe partial ou du struct « type ». Pour spécifier un ordre, tous les champs d’instance doivent être dans la même déclaration.
  • CS0501: « fonction membre » doit déclarer un corps car elle n’est pas marquée , abstract, extern, ou partial
  • CS0750 : Un membre partial ne peut pas avoir le modificateur «abstract ».
  • CS0751 : Un membre partial doit être déclaré dans un type partial class ou partial struct
  • CS0754 : Un membre partial ne peut pas implémenter explicitement une méthode d’interface.
  • CS0755 : Les deux déclarations de méthode partial doivent être des méthodes d’extension ou aucune ne peut être une méthode d’extension.
  • CS0756: Une méthode partial ne peut pas avoir plusieurs déclarations de définition.
  • CS0757 : Une méthode partial ne peut pas avoir plusieurs déclarations d’implémentation.
  • CS0759 : Aucune déclaration de définition trouvée pour la déclaration d’implémentation de la méthode partial.
  • CS0761 : Les déclarations de méthode partial de method<T> ont des contraintes de paramètres de type incohérentes.
  • CS0762 : Impossible de créer un délégué à partir de la méthode car il s’agit d’une méthode partial sans déclaration d’implémentation
  • CS0763 : Les deux déclarations de méthode partial doivent être static ou aucune ne peut être static.
  • CS0764 : Les deux déclarations de méthode partial doivent être unsafe ou aucune ne peut être unsafe
  • CS1067 : Les déclarations partial doivent avoir les mêmes noms de paramètres de type et les mêmes modificateurs de variance dans le même ordre.
  • CS8142 : Les deux déclarations de membre partial doivent utiliser les mêmes noms d’éléments de tuple.
  • CS8663 : Les deux déclarations de membre partial doivent être readonly ou aucune ne peut être readonly
  • CS8796 : Une méthode partial doit avoir des modificateurs d’accessibilité car elle a un type de retour non void.
  • CS8795 : Un membre partial doit avoir une partie d’implémentation car il a des modificateurs d’accessibilité.
  • CS8797 : Une méthode partial doit avoir des modificateurs d’accessibilité car elle a des paramètres « out ».
  • CS8798 : Une méthode partial doit avoir des modificateurs d’accessibilité car elle a un modificateur « virtual », «override », « sealed », « new » ou « extern ».
  • CS8799 : Les deux déclarations de membre partial doivent avoir des modificateurs d’accessibilité identiques.
  • CS8800 : Les deux déclarations de membre partial doivent avoir des combinaisons identiques de modificateurs virtual, override, sealed, et new.
  • CS8817 : Les deux déclarations de méthode partial doivent avoir le même type de retour.
  • CS8818 : Les déclarations de membre partial doivent avoir des valeurs de retour ref correspondantes.
  • CS8863 : Une seule déclaration de type partial peut avoir une liste de paramètres
  • CS8988 : Le modificateur scoped du paramètre ne correspond pas à la définition partial.
  • CS9248 : Une propriété partial doit avoir une partie d’implémentation.
  • CS9249 : Une propriété partial doit avoir une partie de définition.
  • CS9250 : Une propriété partial ne peut pas avoir plusieurs déclarations de définition et ne peut pas être une auto-propriété.
  • CS9251 : Une propriété partial ne peut pas avoir plusieurs déclarations d’implémentation
  • CS9252 : L’accesseur de propriété doit être implémenté car il est déclaré dans la partie définition
  • CS9253 : L’accesseur de propriété n’implémente aucun accesseur déclaré dans la partie définition
  • CS9254 : L’accesseur de propriété doit correspondre à la partie définition
  • CS9255 : Les deux déclarations de propriété partial doivent avoir le même type.
  • CS9256 : Les déclarations de propriété partial ont des différences de signature.
  • CS9257 : Les deux déclarations de propriété partial doivent être requises ou aucune ne peut être requise
  • CS9275 : Un membre partiel doit avoir une partie d’implémentation.
  • CS9276 : Un membre partiel doit avoir une partie de définition.
  • CS9277 : Un membre partiel peut ne pas avoir plusieurs déclarations de définition.
  • CS9278 : Un membre partiel peut ne pas avoir plusieurs déclarations d’implémentation.
  • CS9279 : L’événement partiel ne peut pas avoir d’initialiseur.
  • CS9280 : seule la déclaration d’implémentation d’un constructeur partiel peut avoir un initialiseur.

Les sections suivantes expliquent la cause et les correctifs pour ces erreurs et avertissements.

Types partiels

  • CS0260 : Modificateur partiel manquant sur la déclaration de type ; une autre déclaration partielle de ce type existe
  • CS0261 : Les déclarations partielles de type doivent être toutes les classes, tous les structs ou toutes les interfaces
  • CS0262 : Les déclarations partielles de type ont des modificateurs d’accessibilité en conflit
  • CS0263 : Les déclarations partielles de type ne doivent pas spécifier différentes classes de base
  • CS0264 : Les déclarations partielles de type doivent avoir les mêmes noms de paramètres de type dans le même ordre
  • CS0265 : Les déclarations partielles de type ont des contraintes incohérentes pour le paramètre de type « paramètre de type »
  • CS0267 : Le modificateur 'partial' ne peut apparaître que immédiatement avant 'class', 'record', 'struct', '', 'interface' ou un type de retour de méthode ou de propriété.
  • CS8863 : Une seule déclaration de type partiel peut avoir une liste de paramètres

Votre déclaration de type partial peut amener le compilateur à émettre l’avertissement suivant :

  • CS0282 : Il n’existe aucun ordre défini entre les champs dans plusieurs déclarations partielles de class ou struct 'type'. Pour spécifier un ordre, tous les champs d’instance doivent se trouver dans la même déclaration.

Ces erreurs se produisent lorsque vos déclarations de type partiel ne respectent pas les règles relatives aux types partiels.

  • Ajoutez le partial modificateur à toutes les déclarations du type, car une fois que vous avez fractionné un type sur plusieurs déclarations, chaque partie doit inclure le mot clé (CS0260).
  • Vérifiez que toutes les déclarations utilisent le même mot clé de type, car le mélangeclass, structet recordinterface dans différentes parties du même type n’est pas autorisé (CS0261). Vous devez garantir une cohérence des modificateurs d’accès dans toutes les déclarations, en rendant toutes les parties public ou toutes les parties internal, car une accessibilité conflictuelle sur différentes déclarations crée une ambiguïté quant à la visibilité prévue du type (CS0262).
  • Vérifiez que toutes les déclarations spécifient la même classe de base, car un type peut hériter d’une seule classe de base, de sorte que plusieurs classes de base différentes sont en conflit (CS0263).
  • Pour les types partiels génériques, vérifiez que toutes les déclarations répertorient les mêmes paramètres de type dans le même ordre, car les noms de paramètres de type doivent correspondre exactement entre toutes les parties (CS0264).
  • Vérifiez que les contraintes sur les paramètres de type restent cohérentes dans toutes les déclarations, car les contraintes incohérentes créent une ambiguïté quant aux types qui peuvent être utilisés pour les paramètres de type (CS0265).
  • Placez le partial mot clé immédiatement avant le mot clé de type (class, record, structou interface), car la syntaxe du langage requiert ce classement spécifique (CS0267).
  • Déclarez un constructeur principal sur une seule déclaration partielle, car plusieurs constructeurs principaux seraient en conflit avec les paramètres de constructeur et la logique d’initialisation à utiliser (CS8863).

Lorsque vous déclarez des champs dans plusieurs fichiers pour un type de struct partiel, vous devez consolider toutes les déclarations de champ en un seul fichier si l’ordre de disposition de la mémoire importe, car le compilateur ne peut pas garantir un classement spécifique lorsque les champs sont divisés entre plusieurs fichiers (CS0282). Sinon, si l'ordre de mise en page n’a pas d’importance, vous pouvez appliquer valeur System.Runtime.InteropServices.StructLayoutAttribute avec la valeur LayoutKind.Auto pour permettre au temps d'exécution d’optimiser automatiquement la disposition.

Membres partial

  • CS0750 : Un membre partial ne peut pas avoir le modificateur « abstract ».
  • CS0751 : Un membre partial doit être déclaré dans un type partial class ou partial struct
  • CS0754 : Un membre partial ne peut pas implémenter explicitement une méthode d’interface.
  • CS0763 : Les deux déclarations de méthode partial doivent être static ou aucune ne peut être static.
  • CS0764 : Les deux déclarations de méthode partial doivent être unsafe ou aucune ne peut être unsafe
  • CS8142 : Les deux déclarations de membre partial doivent utiliser les mêmes noms d’éléments de tuple.
  • CS8663 : Les deux déclarations de membre partial doivent être readonly ou aucune ne peut être readonly
  • CS8799 : Les deux déclarations de membre partial doivent avoir des modificateurs d’accessibilité identiques.
  • CS8800 : Les deux déclarations de membre partial doivent avoir des combinaisons identiques de modificateurs virtual, override, sealed, et new.
  • CS8818 : Les déclarations de membre partial doivent avoir des valeurs de retour ref correspondantes.
  • CS8988 : Le modificateur scoped du paramètre ne correspond pas à la définition partial.
  • CS9275 : Un membre partiel doit avoir une partie d’implémentation.
  • CS9276 : Un membre partiel doit avoir une partie de définition.
  • CS9277 : Un membre partiel peut ne pas avoir plusieurs déclarations de définition.
  • CS9278 : Un membre partiel peut ne pas avoir plusieurs déclarations d’implémentation.

Ces erreurs se produisent lorsque vos déclarations de membre partielles violent les règles relatives aux méthodes, propriétés, indexeurs et événements partiels.

  • Supprimez le abstract modificateur des membres partiels, car les membres abstraits nécessitent des classes dérivées pour fournir des implémentations. Cette exigence est en conflit avec le modèle membre partiel où l’implémentation est fournie dans la déclaration d’implémentation (CS0750).
  • Déclarez des membres partiels dans un type qui inclut le partial modificateur, car les membres partiels ne peuvent exister que dans les types partiels (CS0751).
  • Supprimez les implémentations d’interface explicites des membres partiels, car le modèle de déclaration en deux parties n’est pas compatible avec la syntaxe d’implémentation d’interface explicite (CS0754).
  • Incluez ou omettez le static modificateur de manière cohérente dans les deux déclarations, car le mélange des membres statiques et d’instance créerait une ambiguïté quant à la façon dont le membre est appelé (CS0763).
  • Incluez ou omettez le unsafe modificateur de manière cohérente dans les deux déclarations, car des contextes non sécurisés incohérents peuvent créer des problèmes de sécurité ou des erreurs de compilation (CS0764).
  • Utilisez des noms d’éléments tuple identiques dans les deux déclarations, car différents noms créeraient une confusion quant aux noms disponibles dans le code consommateur (CS8142).
  • Incluez ou omettez de manière cohérente le modificateur readonly dans les deux déclarations, car le mélange de déclarations en lecture seule et non en lecture seule crée une ambiguïté quant à la possibilité de modifier l’état de l’instance (CS8663).
  • Utilisez des modificateurs d’accessibilité identiques (tels que public, , privateprotectedou internal) sur les deux déclarations, car différents niveaux d’accessibilité seraient en conflit avec la visibilité du membre (CS8799).
  • Appliquez la même combinaison de modificateurs virtual, override, sealed, et new aux deux déclarations, car ces modificateurs contrôlent l'héritage et le comportement de polymorphisme, qui doivent être cohérents (CS8800).
  • Utilisez des modificateurs de retour correspondants ref dans les deux déclarations, car un comportement de retour par référence incohérent créerait des problèmes de sécurité de type (CS8818).
  • Appliquez le scoped modificateur de manière cohérente aux paramètres des deux déclarations, car ce modificateur contrôle la durée de vie des paramètres ref et doit correspondre pour garantir la sécurité de la mémoire (CS8988).
  • Fournissez une déclaration d’implémentation pour chaque membre partiel qui a une déclaration de définition, car les membres partiels exigent que les deux parties soient terminées (CS9275, CS9276).
  • Assurez-vous que chaque membre partiel a exactement une déclaration de définition et une déclaration d’implémentation, car plusieurs déclarations créeraient une ambiguïté quant à la définition ou à l’implémentation à utiliser (CS9277, CS9278).

Méthodes partielles

  • CS0501 : « fonction membre » doit déclarer un corps car elle n’est pas marquée , abstract, extern, ou partial
  • CS0755 : Les deux déclarations de méthode partial doivent être des méthodes d’extension ou aucune ne peut être une méthode d’extension.
  • CS0756: Une méthode partial ne peut pas avoir plusieurs déclarations de définition.
  • CS0757 : Une méthode partial ne peut pas avoir plusieurs déclarations d’implémentation.
  • CS0759 : Aucune déclaration de définition trouvée pour la déclaration d’implémentation de la méthode partial.
  • CS0761 : Les déclarations de méthode partial de method<T> ont des contraintes de paramètres de type incohérentes.
  • CS0762 : Impossible de créer un délégué à partir de la méthode car il s’agit d’une méthode partial sans déclaration d’implémentation
  • CS1067 : Les déclarations partial doivent avoir les mêmes noms de paramètres de type et les mêmes modificateurs de variance dans le même ordre.
  • CS8796 : Une méthode partial doit avoir des modificateurs d’accessibilité car elle a un type de retour non void.
  • CS8795 : Un membre partial doit avoir une partie d’implémentation car il a des modificateurs d’accessibilité.
  • CS8797 : Une méthode partial doit avoir des modificateurs d’accessibilité car elle a des paramètres « out ».
  • CS8798 : Une méthode partial doit avoir des modificateurs d’accessibilité car elle a un modificateur « virtual », « override », « sealed », « new » ou « extern ».
  • CS8817 : Les deux déclarations de méthode partial doivent avoir le même type de retour.

Ces erreurs se produisent lorsque vos déclarations de méthode partielles violent les règles relatives aux méthodes partielles.

  • Ajoutez le partial modificateur à la déclaration de méthode ou fournissez un corps de méthode, car les méthodes sans implémentation doivent être marquées comme abstract, externou partial (CS0501).
  • Vérifiez que les deux déclarations incluent ou omettent la syntaxe de la méthode d’extension (this modificateur sur le premier paramètre) de manière cohérente, car la combinaison des déclarations d’extension et de non-extension crée des signatures de méthode incompatibles (CS0755).
  • Supprimez les déclarations de définition en double (les déclarations sans corps de méthode), car chaque méthode partielle ne peut avoir qu’une seule définition (CS0756).
  • Supprimez les déclarations d’implémentation en double (les déclarations avec des corps de méthode), car chaque méthode partielle ne peut avoir qu’une seule implémentation (CS0757).
  • Ajoutez une déclaration de définition correspondante pour chaque déclaration d’implémentation, car chaque méthode partielle avec un corps doit avoir une déclaration de signature correspondante sans corps (CS0759).
  • Vérifiez que les contraintes de paramètre de type correspondent aux deux déclarations, car les contraintes incohérentes créent une ambiguïté quant aux types valides pour la méthode générique (CS0761).
  • Fournissez une déclaration d’implémentation avant de créer un délégué à partir de la méthode, car les délégués nécessitent une implémentation concrète de méthode à référencer (CS0762).
  • Pour les méthodes partielles génériques, assurez-vous que les deux déclarations utilisent les mêmes noms de paramètres de type et les modificateurs de variance dans le même ordre, car les signatures génériques incompatibles créent des déclarations de méthode incompatibles (CS1067).
  • Ajoutez des modificateurs d’accessibilité explicites (tels que public, private, protected ou internal) lorsque la méthode retourne un type non-void, car les méthodes partielles non-vides doivent avoir défini l’accessibilité pour être appelées à partir d’autre code (CS8796).
  • Fournissez une déclaration d’implémentation lorsque des modificateurs d’accessibilité sont spécifiés, car les méthodes partielles accessibles doivent avoir des implémentations à appeler (CS8795).
  • Ajoutez des modificateurs d’accessibilité explicites lorsque la méthode a out paramètres, car les méthodes avec paramètres out doivent avoir défini l’accessibilité pour être appelables (CS8797).
  • Ajoutez des modificateurs d'accessibilité explicites lors de l'utilisation de virtual, override, sealed, new ou extern, car ces modificateurs affectent la visibilité des méthodes et nécessitent que l’accessibilité soit spécifiée de manière explicite (CS8798).
  • Vérifiez que les deux déclarations spécifient le même type de retour, car différents types de retour créent des signatures de méthode incompatibles (CS8817).

Propriétés partial

  • CS9248 : Une propriété partial doit avoir une partie d’implémentation.
  • CS9249 : Une propriété partial doit avoir une partie de définition.
  • CS9250 : Une propriété partial ne peut pas avoir plusieurs déclarations de définition et ne peut pas être une auto-propriété.
  • CS9251 : Une propriété partial ne peut pas avoir plusieurs déclarations d’implémentation
  • CS9252 : L’accesseur de propriété doit être implémenté car il est déclaré dans la partie définition
  • CS9253 : L’accesseur de propriété n’implémente aucun accesseur déclaré dans la partie définition
  • CS9254 : L’accesseur de propriété doit correspondre à la partie définition
  • CS9255 : Les deux déclarations de propriété partial doivent avoir le même type.
  • CS9257 : Les deux déclarations de propriété partial doivent être requises ou aucune ne peut être requise

Votre déclaration partielle de propriété ou d’indexeur peut entraîner l’émission de l’avertissement suivant :

  • CS9256 : Les déclarations de propriété partial ont des différences de signature.

Ces erreurs et avertissements se produisent lorsque vos déclarations de propriété ou d’indexeur partielles violent les règles relatives aux propriétés partielles.

  • Fournissez une déclaration d’implémentation pour chaque déclaration de définition de propriété partielle, car les propriétés partielles nécessitent que les deux parties soient terminées (CS9248).
  • Fournissez une déclaration de définition pour chaque déclaration d’implémentation de propriété partielle, car chaque implémentation doit avoir une définition correspondante (CS9249).
  • Supprimez les déclarations de définition en double et évitez d’utiliser la syntaxe de propriété automatique dans la déclaration d’implémentation, car chaque propriété partielle ne peut avoir qu’une seule définition et l’implémentation doit inclure des corps d’accesseurs explicites (CS9250).
  • Supprimez les déclarations d’implémentation en double, car chaque propriété partielle ne peut avoir qu’une seule implémentation (CS9251).
  • Implémentez tous les accesseurs déclarés dans la déclaration de définition, car la déclaration d’implémentation doit fournir des corps pour chaque accesseur (get, set ou init) spécifié dans la définition (CS9252).
  • Supprimez les accesseurs de la déclaration d’implémentation qui n’ont pas été déclarés dans la déclaration de définition, car vous ne pouvez implémenter que des accesseurs déclarés dans la partie de définition (CS9253).
  • Vérifiez que les signatures d’accesseur correspondent entre les deux déclarations, y compris le type d’accesseur (get, set ou init) et les modificateurs, car les définitions d’accesseur incohérentes créent des déclarations de propriété incompatibles (CS9254).
  • Vérifiez que les deux déclarations spécifient le même type de propriété, car différents types créent des signatures de propriété incompatibles (CS9255).
  • Vérifiez que les deux déclarations incluent ou omettent le required modificateur de manière cohérente, car le mélange de déclarations requises et non requises crée une ambiguïté quant à savoir si la propriété doit être initialisée (CS9257).
  • Examinez et corrigez toutes les incompatibilités de signature entre les déclarations déclarantes et implémentant, car les différences entre les modificateurs d’accessibilité, les types de retour ou les listes de paramètres (pour les indexeurs) peuvent provoquer un comportement inattendu (CS9256).

Événements partiels et constructeurs

  • CS9279 : L’événement partiel ne peut pas avoir d’initialiseur.
  • CS9280 : seule la déclaration d’implémentation d’un constructeur partiel peut avoir un initialiseur.

Vous avez déclaré un initialiseur sur la définition d’un constructeur partiel ou sur une déclaration d’événement partiel. Supprimez l’initialiseur.