Partager via


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

Il existe de nombreuses erreurs 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
  • CS9258 : Dans cette version de langage, le mot clé «field » est lié à un champ de stockage synthétisé pour la propriété. Pour éviter de générer un champ de stockage synthétisé et de faire référence au membre existant, utilisez «this.field » ou «@field » à la place.
  • CS9263 : Une propriété partielle ne peut pas avoir d’initialiseur sur la définition et l’implémentation.

Les avertissements suivants peuvent être générés pour les propriétés sauvegardées par les champs :

  • CS9264 : La propriété non nullable doit contenir une valeur non Null lors de la sortie du constructeur. Envisagez d’ajouter le modificateur « obligatoire » ou de déclarer la propriété comme nullable, ou d’ajouter des attributs «[field: MaybeNull, AllowNull] ».*
  • CS9266 : Un accesseur de propriété doit utiliser «field », car l’autre accesseur l’utilise.

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

Types partiels

  • 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.
  • CS8863 : Une seule déclaration de type partial peut avoir une liste de paramètres

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

  • CS0282 : Il n’y a pas d’ordre défini entre les champs dans les déclarations multiples de la class partial ou du struct « type ». Pour spécifier un ordre, tous les champs d’instance doivent être dans la même déclaration.

Pour tout type partial, le mot-clé partial doit précéder immédiatement class, record, struct ou interface. Le compilateur émet une erreur s’il apparaît dans un autre ordre. De plus :

  • Toutes les déclarations d’un type partial doivent correspondre en termes de type (class, struct, record class, record struct, readonly struct, ou readonly record struct).
  • Toutes les déclarations doivent inclure le modificateur partial.
  • Les déclarations pour un type partial générique doivent inclure les mêmes paramètres de type dans le même ordre.

Certaines parties de la déclaration ne sont pas obligées d’être répétées dans toutes les déclarations pour un type. Cependant, si ces éléments sont répétés dans plusieurs déclarations partial, ils doivent correspondre :

  • Tous les modificateurs d’accès, tels que public.
  • Toute classe de base ou interfaces implémentées.
  • Toutes les contraintes sur les paramètres de type.

Un constructeur principal peut être déclaré sur au maximum une déclaration pour un type partial.

Le compilateur vous avertit si vous avez plusieurs champs déclarés dans plusieurs fichiers pour un type partial struct. Si l’ordre de disposition est important, vous devez déclarer tous les champs dans le même fichier. Si l’ordre n’est pas important, vous pouvez utiliser le System.Runtime.InteropServices.StructLayoutAttribute avec la valeur LayoutKind.Auto.

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.

Les membres partial ont deux déclarations. La déclaration sans implémentation est la déclaration de définition. La déclaration avec l’implémentation est la déclaration d’implémentation. Les membres partial sont autorisés uniquement dans un type partial. Les membres partial ne peuvent pas être abstract. Les membres partial ne peuvent pas implémenter explicitement une interface. Les deux déclarations d’un membre partial doivent avoir des signatures identiques. Par exemple, soit les deux, soit aucune des déclarations ne peut inclure les modificateurs static ou unsafe.

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.

Certaines déclarations de méthode partial ne nécessitent pas de déclaration d’implémentation. C’est-à-dire que si le membre retourne void, ne déclare aucun modificateur d’accès (y compris le modificateur par défaut private) et n’inclut aucun des modificateurs virtual, override, sealed ou new. Sinon, toute méthode partial doit inclure à la fois les déclarations de définition et d’implémentation.

Lorsqu’une méthode partial inclut une déclaration d’implémentation, les deux déclarations doivent être identiques. Une seule déclaration d’implémentation peut être définie.

Propriétés partial

Les erreurs suivantes indiquent des erreurs dans vos déclarations de propriété ou d’indexeur 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

L’avertissement suivant indique une différence de signature dans les déclarations de définition et d’implémentation dans une propriété partial :

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

Une propriété ou un indexeur partial doit avoir à la fois une déclaration de définition et une déclaration d’implémentation. Les signatures des deux déclarations doivent correspondre. Étant donné que la déclaration déclarante utilise la même syntaxe qu’une propriété implémentée automatiquement, la déclaration d’implémentation ne peut pas être une propriété implémentée automatiquement. Les accesseurs doivent avoir au moins un corps d’accesseur. À compter de C# 13, vous pouvez utiliser le field mot clé pour déclarer un accesseur à l’aide d’une syntaxe concise :

public partial int ImplementingDeclaration { get => field; set; }

propriétés sauvegardées par champ

  • CS9258 : Dans cette version de langage, le mot clé «field » est lié à un champ de stockage synthétisé pour la propriété. Pour éviter de générer un champ de stockage synthétisé et de faire référence au membre existant, utilisez «this.field » ou «@field » à la place.
  • CS9263 : Une propriété partielle ne peut pas avoir d’initialiseur sur la définition et l’implémentation.
  • CS9264 : La propriété non nullable doit contenir une valeur non Null lors de la sortie du constructeur. Envisagez d’ajouter le modificateur « obligatoire » ou de déclarer la propriété comme nullable, ou d’ajouter des attributs «[field: MaybeNull, AllowNull] ».*
  • CS9266 : Un accesseur de propriété doit utiliser «field », car l’autre accesseur l’utilise.

Important

Le field mot clé est une fonctionnalité d’aperçu en C# 13. Vous devez utiliser .NET 9 et définir votre <LangVersion> élément preview dans votre fichier projet afin d’utiliser le field mot clé contextuel.

Vous devez être prudent à l’aide de la field fonctionnalité de mot clé dans une classe qui a un champ nommé field. Le nouveau field mot clé ombre un champ nommé field dans l’étendue d’un accesseur de propriété. Vous pouvez modifier le nom de la field variable ou utiliser le @ jeton pour référencer l’identificateur field en tant que @field. Pour plus d’informations, lisez la spécification de fonctionnalité pour le field mot clé.

À compter de C# 13, la fonctionnalité d’aperçu, field les propriétés sauvegardées vous permettent d’accéder au champ de stockage synthétisé du compilateur pour une propriété. CS9258 indique que vous avez une variable nommée field, qui peut être masquée par le mot clé fieldcontextuel .

CS9263 indique que votre déclaration déclarante inclut une implémentation. Cette implémentation peut accéder au champ de stockage synthétisé du compilateur pour cette propriété. CS9264 indique que l’utilisation d’un champ de field stockage non Nullable est supposé que la déclaration de propriété est nullable. Le compilateur part du principe que le champ de stockage et la propriété ont la même nullabilité. Vous devez ajouter l’attribut [field:MaybeNull, AllowNull] à la déclaration de propriété pour indiquer que la field valeur doit être considérée comme nullable. CS9266 indique qu’un accesseur de propriétés utilise le field mot clé, mais l’autre utilise un champ de stockage déclaré manuellement. L’avertissement indique que vous l’avez peut-être fait par accident.