Compartir a través de


Errores y advertencias relacionados con declaraciones de tipos partial y miembros partial

Puede encontrar los siguientes errores relacionados con las declaraciones de tipo de partial y de miembro de partial.

  • CS0260: Falta el modificador parcial en la declaración de tipo; ya existe otra declaración parcial de este tipo
  • CS0261: Las declaraciones parciales de tipo deben ser todas las clases, todas las estructuras o todas las interfaces
  • CS0262: Las declaraciones parciales de tipo tienen modificadores de accesibilidad conflictivos
  • CS0263: Las declaraciones parciales de tipo no deben especificar clases base diferentes
  • CS0264: Las declaraciones parciales de tipo deben tener los mismos nombres de parámetros de tipo en el mismo orden
  • CS0265: Las declaraciones parciales de tipo tienen restricciones incoherentes para el parámetro de tipo "type parameter"
  • CS0267: El modificador "partial" solo puede aparecer inmediatamente antes de "class", "record", "struct", "interface", o de un tipo de devolución de propiedad o método.
  • CS0282: No hay ninguna ordenación definida entre campos en varias declaraciones de class parcial o struct "type". Para indicar una ordenación, todos los campos de instancia deben estar en la misma declaración
  • CS0501: "member function" debe declarar un cuerpo porque no se marcó como abstract, extern o partial
  • CS0750: Un miembro parcial no puede tener el modificador "abstract"
  • CS0751: Un miembro parcial debe declararse en un class parcial o un struct parcial
  • CS0754: Un miembro parcial no puede implementar explícitamente un método de interfaz
  • CS0755: Ambas declaraciones de método parcial deben ser métodos de extensión; de lo contrario, no puede serlo ninguna de las dos
  • CS0756: Un método parcial no puede tener varias declaraciones de definición
  • CS0757: Un método parcial no puede tener varias declaraciones de implementación
  • CS0759: No se encuentra ninguna declaración de definición para la declaración de implementación del método parcial
  • CS0761: Las declaraciones de método parcial de method<T> tienen restricciones incoherentes de parámetros de tipo
  • CS0762: No se puede crear un delegado a partir del método porque es un método parcial sin una declaración de implementación
  • CS0763: Ambas declaraciones de método parcial deben ser static o ninguna de ellas puede ser static.
  • CS0764: Ambas declaraciones de método parcial deben ser unsafe o ninguna de ellas puede ser unsafe
  • CS1067: Las declaraciones parciales deben tener los mismos nombres de parámetros de tipo ni modificadores de variancia en el mismo orden
  • CS8142: Ambas declaraciones de miembro parcial deben usar los mismos nombres de elementos de tupla
  • CS8663: Ambas declaraciones de miembro parcial deben ser de solo lectura o ninguna puede ser de solo lectura
  • CS8796: El método parcial debe tener modificadores de accesibilidad porque tiene un tipo de valor devuelto no nulo
  • CS8795: El miembro parcial debe tener una parte de implementación porque tiene modificadores de accesibilidad
  • CS8797: El método parcial debe tener modificadores de accesibilidad porque tiene parámetros "out"
  • CS8798: El método parcial debe tener modificadores de accesibilidad porque tiene un modificador "virtual', 'override", "sealed", "new" o "extern"
  • CS8799: Ambas declaraciones de miembro parcial deben tener modificadores de accesibilidad idénticos
  • CS8800: Ambas declaraciones de miembro parcial deben tener combinaciones idénticas de los modificadores virtual, override, sealed y new
  • CS8817: Ambas declaraciones de método parcial deben tener el mismo tipo de valor devuelto
  • CS8818: Las declaraciones de miembro parcial deben tener valores devueltos ref iguales
  • CS8863: Solo una declaración de tipo parcial puede tener una lista de parámetros
  • CS8988: El modificador scoped del parámetro no coincide con la definición parcial
  • CS9248: La propiedad parcial debe tener una parte de implementación
  • CS9249: La propiedad parcial debe tener una parte de definición
  • CS9250: La propiedad parcial puede no tener varias declaraciones de definición y no puede ser una propiedad automática
  • CS9251: Una propiedad parcial no puede tener varias declaraciones de implementación
  • CS9252: El descriptor de acceso de la propiedad debe implementarse porque se declara en la parte de definición
  • CS9253: El descriptor de acceso de la propiedad no implementa ningún descriptor de acceso declarado en la parte de definición
  • CS9254: El descriptor de acceso de la propiedad debe coincidir con la parte de definición
  • CS9255: Ambas declaraciones de propiedad parcial deben tener el mismo tipo
  • CS9256: Las declaraciones de propiedad parcial tienen diferencias de firma
  • CS9257: Ambas declaraciones de propiedad parcial deben ser obligatorias o ninguna debe ser necesaria
  • CS9275: el miembro parcial debe tener una parte de implementación.
  • CS9276: el miembro parcial debe tener una parte de definición.
  • CS9277: es posible que el miembro parcial no tenga varias declaraciones de definición.
  • CS9278: es posible que el miembro parcial no tenga varias declaraciones de implementación.
  • CS9279: el evento parcial no puede tener inicializador.
  • CS9280: solo la declaración de implementación de un constructor parcial puede tener un inicializador.

En las secciones siguientes se explica la causa y las soluciones de estos errores y advertencias.

Tipos parciales

  • CS0260: falta el modificador parcial en la declaración de tipo; existe otra declaración parcial de este tipo.
  • CS0261: Las declaraciones parciales de tipo deben ser todas las clases, todas las estructuras o todas las interfaces.
  • CS0262: Las declaraciones parciales de tipo tienen modificadores de accesibilidad en conflicto
  • CS0263: Las declaraciones parciales de tipo no deben especificar clases base diferentes
  • CS0264: Las declaraciones parciales de tipo deben tener los mismos nombres de parámetro de tipo en el mismo orden
  • CS0265: Las declaraciones parciales de tipo tienen restricciones incoherentes para el parámetro de tipo 'parámetro de tipo'
  • CS0267: El modificador 'partial' solo puede aparecer inmediatamente antes de 'class', 'record', 'struct', 'interface' o un tipo de valor devuelto de método o propiedad.
  • CS8863: solo una declaración de tipo parcial puede tener una lista de parámetros

La declaración de tipo parcial puede hacer que el compilador genere la siguiente advertencia:

  • CS0282: No hay ninguna ordenación definida entre campos en varias declaraciones de tipo o class parcialstruct. Para especificar una ordenación, todos los campos de instancia deben estar en la misma declaración.

Estos errores se producen cuando las declaraciones de tipos parciales infringen las reglas de tipos parciales.

  • Agregue el partial modificador a todas las declaraciones del tipo, ya que una vez dividido un tipo entre varias declaraciones, cada parte debe incluir la palabra clave (CS0260).
  • Asegúrese de que todas las declaraciones usan la misma palabra clave de tipo, ya que no se permite mezclar class, struct, recordy interface en partes diferentes del mismo tipo (CS0261). Debe asegurarse de que los modificadores de acceso sean coherentes en todas las declaraciones, como configurar todas las partes public o todas las partes internal, ya que tener accesibilidades conflictivas en diferentes declaraciones crea ambigüedad acerca de la visibilidad prevista del tipo (CS0262).
  • Compruebe que todas las declaraciones especifican la misma clase base, ya que un tipo solo puede heredar de una clase base, por lo que varias clases base diferentes entran en conflicto (CS0263).
  • Para los tipos parciales genéricos, asegúrese de que todas las declaraciones enumeran los mismos parámetros de tipo en el mismo orden, ya que los nombres de parámetro de tipo deben coincidir exactamente entre todas las partes (CS0264).
  • Compruebe que las restricciones en los parámetros de tipo siguen siendo coherentes en todas las declaraciones, ya que las restricciones incoherentes crearían ambigüedad sobre qué tipos se pueden usar para los parámetros de tipo (CS0265).
  • Coloque la partial palabra clave inmediatamente antes de la palabra clave type (class, record, structo interface), porque la sintaxis del lenguaje requiere este orden específico (CS0267).
  • Declare un constructor principal solo en una declaración parcial, ya que varios constructores principales entrarían en conflicto sobre los parámetros de constructor y la lógica de inicialización que se va a usar (CS8863).

Al declarar campos en varios archivos para un tipo de estructura parcial, debe consolidar todas las declaraciones de campo en un único archivo si el orden de diseño de memoria es importante, ya que el compilador no puede garantizar un orden específico cuando los campos se dividen en varios archivos (CS0282). Como alternativa, si el orden de diseño no importa, puede aplicar el System.Runtime.InteropServices.StructLayoutAttribute con el valor LayoutKind.Auto para permitir que el runtime optimice el diseño automáticamente.

Miembros parciales

  • CS0750: Un miembro parcial no puede tener el modificador "abstract"
  • CS0751: Un miembro parcial debe declararse en un class parcial o un struct parcial
  • CS0754: Un miembro parcial no puede implementar explícitamente un método de interfaz
  • CS0763: Ambas declaraciones de método parcial deben ser static o ninguna de ellas puede ser static
  • CS0764: Ambas declaraciones de método parcial deben ser unsafe o ninguna de ellas puede ser unsafe
  • CS8142: Ambas declaraciones de miembro parcial deben usar los mismos nombres de elementos de tupla
  • CS8663: Ambas declaraciones de miembro parcial deben ser de solo lectura o ninguna puede ser de solo lectura
  • CS8799: Ambas declaraciones de miembro parcial deben tener modificadores de accesibilidad idénticos
  • CS8800: Ambas declaraciones de miembro parcial deben tener combinaciones idénticas de los modificadores virtual, override, sealed y new
  • CS8818: Las declaraciones de miembro parcial deben tener valores devueltos ref iguales
  • CS8988: El modificador scoped del parámetro no coincide con la definición parcial
  • CS9275: el miembro parcial debe tener una parte de implementación.
  • CS9276: el miembro parcial debe tener una parte de definición.
  • CS9277: es posible que el miembro parcial no tenga varias declaraciones de definición.
  • CS9278: es posible que el miembro parcial no tenga varias declaraciones de implementación.

Estos errores se producen cuando las declaraciones de miembro parcial infringen las reglas de métodos parciales, propiedades, indizadores y eventos.

  • Quite el abstract modificador de miembros parciales, ya que los miembros abstractos requieren clases derivadas para proporcionar implementaciones. Este requisito entra en conflicto con el patrón de miembro parcial en el que se proporciona la implementación en la declaración de implementación (CS0750).
  • Declare miembros parciales dentro de un tipo que incluya el partial modificador, ya que los miembros parciales solo pueden existir en tipos parciales (CS0751).
  • Elimine implementaciones explícitas de interfaces de los miembros parciales, dado que el patrón de declaración de dos partes no es compatible con la sintaxis de implementación explícita de interfaces (CS0754).
  • Incluya o omita el static modificador de forma coherente en ambas declaraciones, ya que la combinación de miembros estáticos e de instancia crearía ambigüedad sobre cómo se invoca el miembro (CS0763).
  • Incluya o omita el unsafe modificador de forma coherente en ambas declaraciones, ya que los contextos no seguros incoherentes podrían crear problemas de seguridad o errores de compilación (CS0764).
  • Use nombres de elementos de tupla idénticos en ambas declaraciones, ya que nombres diferentes crearían confusión sobre qué nombres están disponibles en el código que los consume (CS8142).
  • Incluir o excluir el modificador readonly de manera coherente en ambas declaraciones, ya que la combinación de declaraciones de solo lectura y no solo lectura crea ambigüedad sobre si el miembro puede modificar el estado de la instancia (CS8663).
  • Use modificadores de accesibilidad idénticos (como public, private, protectedo internal) en ambas declaraciones, ya que los distintos niveles de accesibilidad entrarían en conflicto sobre la visibilidad del miembro (CS8799).
  • Aplique la misma combinación de modificadores virtual, override, sealed y new a ambas declaraciones, ya que estos modificadores controlan el comportamiento de herencia y polimorfismo, que deben ser coherentes (CS8800).
  • Usa un modificador de devolución por referencia coincidente ref en ambas declaraciones, ya que un comportamiento incoherente de devolución por referencia crearía problemas de seguridad de tipo (CS8818).
  • Aplique el scoped modificador de forma coherente a los parámetros de ambas declaraciones, ya que este modificador controla la duración de los parámetros ref y debe coincidir para garantizar la seguridad de la memoria (CS8988).
  • Proporcione una declaración de implementación para cada miembro parcial que tenga una declaración de definición, ya que los miembros parciales requieren que se completen ambas partes (CS9275, CS9276).
  • Asegúrese de que cada miembro parcial tiene exactamente una declaración de definición y una declaración de implementación, ya que varias declaraciones crearían ambigüedad sobre qué definición o implementación usar (CS9277, CS9278).

Métodos parciales

  • CS0501: "member function" debe declarar un cuerpo porque no se marcó como abstract, extern o partial
  • CS0755: Ambas declaraciones de método parcial deben ser métodos de extensión; de lo contrario, no puede serlo ninguna de las dos
  • CS0756: Un método parcial no puede tener varias declaraciones de definición
  • CS0757: Un método parcial no puede tener varias declaraciones de implementación
  • CS0759: No se encuentra ninguna declaración de definición para la declaración de implementación del método parcial
  • CS0761: Las declaraciones de método parcial de method<T> tienen restricciones incoherentes de parámetros de tipo
  • CS0762: No se puede crear un delegado a partir del método porque es un método parcial sin una declaración de implementación
  • CS1067: Las declaraciones parciales deben tener los mismos nombres de parámetros de tipo ni modificadores de variancia en el mismo orden
  • CS8796: El método parcial debe tener modificadores de accesibilidad porque tiene un tipo de valor devuelto no nulo
  • CS8795: El miembro parcial debe tener una parte de implementación porque tiene modificadores de accesibilidad
  • CS8797: El método parcial debe tener modificadores de accesibilidad porque tiene parámetros "out"
  • CS8798: El método parcial debe tener modificadores de accesibilidad porque tiene un modificador "virtual", "override", "sealed", "new" o "extern"
  • CS8817: Ambas declaraciones de método parcial deben tener el mismo tipo de valor devuelto

Estos errores se producen cuando las declaraciones de método parcial infringen las reglas de los métodos parciales.

  • Agregue el partial modificador a la declaración del método o proporcione un cuerpo del método, ya que los métodos sin implementaciones deben marcarse como abstract, externo partial (CS0501).
  • Asegúrese de que ambas declaraciones incluyen o omiten la sintaxis del método de extensión (this modificador en el primer parámetro) de forma coherente, ya que la combinación de declaraciones de extensión y no extensiones crea firmas de método incompatibles (CS0755).
  • Quite las declaraciones de definición duplicadas (las declaraciones sin cuerpos de método), ya que cada método parcial solo puede tener una definición (CS0756).
  • Quite las declaraciones de implementación duplicadas (las declaraciones con cuerpos de método), ya que cada método parcial solo puede tener una implementación (CS0757).
  • Agregue una declaración de definición correspondiente para cada declaración de implementación, ya que cada método parcial con un cuerpo debe tener una declaración de firma coincidente sin un cuerpo (CS0759).
  • Asegúrese de que las restricciones de parámetro de tipo coinciden entre ambas declaraciones, ya que las restricciones incoherentes crean ambigüedad sobre qué tipos son válidos para el método genérico (CS0761).
  • Proporcione una declaración de implementación antes de crear un delegado a partir del método , ya que los delegados requieren una implementación de método concreta para hacer referencia a (CS0762).
  • Para los métodos parciales genéricos, asegúrese de que ambas declaraciones usan los mismos nombres de parámetro de tipo y modificadores de varianza en el mismo orden, ya que las firmas genéricas no coincidentes crean declaraciones de método incompatibles (CS1067).
  • Agregue modificadores de accesibilidad explícitos (como public, private, protected, o internal) cuando el método devuelva un tipo que no sea void, ya que los métodos parciales no nulos deben tener una accesibilidad definida para que puedan ser llamados desde otros códigos (CS8796).
  • Proporcione una declaración de implementación cuando se especifican modificadores de accesibilidad, ya que los métodos parciales accesibles deben tener implementaciones para invocarse (CS8795).
  • Agregue modificadores de accesibilidad explícitos cuando el método tenga out parámetros, ya que los métodos con parámetros out deben tener una accesibilidad definida para que puedan ser invocados (CS8797).
  • Agregue modificadores de accesibilidad explícitos al usar virtual, override, sealed, new u extern, porque estos modificadores afectan la visibilidad del método y requieren una especificación de accesibilidad explícita (CS8798).
  • Asegúrese de que ambas declaraciones especifican el mismo tipo de valor devuelto, ya que los distintos tipos de valor devuelto crean firmas de método incompatibles (CS8817).

Propiedades parciales

  • CS9248: La propiedad parcial debe tener una parte de implementación
  • CS9249: La propiedad parcial debe tener una parte de definición
  • CS9250: La propiedad parcial puede no tener varias declaraciones de definición y no puede ser una propiedad automática
  • CS9251: Una propiedad parcial no puede tener varias declaraciones de implementación
  • CS9252: El descriptor de acceso de la propiedad debe implementarse porque se declara en la parte de definición
  • CS9253: El descriptor de acceso de la propiedad no implementa ningún descriptor de acceso declarado en la parte de definición
  • CS9254: El descriptor de acceso de la propiedad debe coincidir con la parte de definición
  • CS9255: Ambas declaraciones de propiedad parcial deben tener el mismo tipo
  • CS9257: Ambas declaraciones de propiedad parcial deben ser obligatorias o ninguna debe ser necesaria

Tu declaración parcial de propiedad o indexador puede causar que el compilador emita la siguiente advertencia:

  • CS9256: Las declaraciones de propiedad parcial tienen diferencias de firma

Estos errores y advertencias se producen cuando las declaraciones parciales de propiedad o indexador infringen las reglas de las propiedades parciales.

  • Proporcione una declaración de implementación para cada declaración de definición de propiedad parcial, ya que las propiedades parciales requieren que ambas partes se completen (CS9248).
  • Proporcione una declaración de definición para cada declaración de implementación de propiedad parcial, ya que cada implementación debe tener una definición correspondiente (CS9249).
  • Quite las declaraciones de definición duplicadas y evite usar la sintaxis de propiedad automática en la declaración de implementación, ya que cada propiedad parcial solo puede tener una definición y la implementación debe incluir cuerpos de descriptor de acceso explícitos (CS9250).
  • Quite las declaraciones de implementación duplicadas, ya que cada propiedad parcial solo puede tener una implementación (CS9251).
  • Implemente todos los descriptores de acceso declarados en la declaración de definición, ya que la declaración de implementación debe proporcionar cuerpos para cada descriptor de acceso (get, set o init) especificado en la definición (CS9252).
  • Quite los descriptores de acceso de la declaración de implementación que no se declararon en la declaración de definición, ya que solo puede implementar descriptores de acceso declarados en la parte de definición (CS9253).
  • Asegúrese de que las firmas de descriptor de acceso coinciden entre ambas declaraciones, incluido el tipo de descriptor de acceso (get, set o init) y los modificadores, ya que las definiciones de descriptor de acceso incoherentes crean declaraciones de propiedad incompatibles (CS9254).
  • Asegúrese de que ambas declaraciones especifican el mismo tipo de propiedad, ya que los distintos tipos crean firmas de propiedad incompatibles (CS9255).
  • Asegúrese de que ambas declaraciones incluyen o omiten el required modificador de forma coherente, ya que la combinación de declaraciones necesarias y no necesarias crea ambigüedad sobre si la propiedad debe inicializarse (CS9257).
  • Revise y corrija cualquier discrepancia de firma entre las declaraciones de definición e implementación, ya que las diferencias en los modificadores de accesibilidad, los tipos de valor devuelto o las listas de parámetros (para indizadores) pueden provocar un comportamiento inesperado (CS9256).

Eventos y constructores parciales

  • CS9279: el evento parcial no puede tener inicializador.
  • CS9280: solo la declaración de implementación de un constructor parcial puede tener un inicializador.

Declaró un inicializador en la declaración de definición de un constructor parcial o en una declaración de evento parcial. Quite el inicializador.