Condividi tramite


Errori e avvisi relativi alle dichiarazioni di tipi partial e membri partial

Puoi incontrare i seguenti errori correlati alle dichiarazioni di tipo partial e membro partial.

  • CS0260: Modificatore parziale mancante nella dichiarazione del tipo; esiste un'altra dichiarazione parziale di questo tipo
  • CS0261: Le dichiarazioni parziali dei tipi devono essere costituite solo da classi, strutture o interfacce
  • CS0262: Le dichiarazioni parziali dei tipi contengono modificatori di accessibilità in conflitto
  • CS0263: Le dichiarazioni parziali del tipo non devono specificare classi base
  • CS0264: Le dichiarazioni parziali del tipo devono avere gli stessi nomi di parametro di tipo nello stesso ordine
  • CS0265: Le dichiarazioni parziali del tipo contengono vincoli incoerenti per il parametro di tipo 'type parameter'
  • CS0267: Il modificatore "partial" può solo comparire immediatamente prima di "class", "record", "struct", "interface" o di un tipo restituito da una proprietà o un metodo.
  • CS0282: Non è stato definito nessun ordine tra i campi in più dichiarazioni di classe o struttura parziale "type". Per specificare un ordine, tutti i campi dell'istanza devono essere inclusi nella stessa dichiarazione.
  • CS0501: 'member function' deve dichiarare un corpo perché non è contrassegnato come abstract, extern o partial
  • CS0750: Un membro parziale non può avere il modificatore 'abstract'.
  • CS0751: Un membro parziale deve essere dichiarato in una class parziale o in una struct parziale
  • CS0754: Un membro parziale non può implementare in modo esplicito un metodo di interfaccia.
  • CS0755: Entrambe le dichiarazioni di metodo parziale devono essere metodi di estensione, altrimenti nessuna delle due potrà esserlo.
  • CS0756: Un metodo parziale non può avere più dichiarazioni di definizione.
  • CS0757: Un metodo parziale non può avere più dichiarazioni di implementazione.
  • CS0759: Non sono state trovate dichiarazioni di definizione per la dichiarazione di implementazione del metodo parziale.
  • CS0761: Le dichiarazioni di metodo parziale del method<T> contengono vincoli incoerenti per il parametro di tipo.
  • CS0762: Non è possibile creare il delegato dal metodo perché è un metodo parziale senza una dichiarazione di implementazione
  • CS0763: Entrambe le dichiarazioni di metodo parziale devono essere static, altrimenti nessuna delle due potrà essere static.
  • CS0764: Entrambe le dichiarazioni di metodo parziale devono essere unsafe, altrimenti nessuna delle due potrà essere unsafe
  • CS1067: Le dichiarazioni parziali devono avere gli stessi nomi di parametro di tipo e i modificatori di varianza nello stesso ordine.
  • CS8142: Entrambe le dichiarazioni di membro parziale devono usare gli stessi nomi di elemento di tupla.
  • CS8663: Entrambe le dichiarazioni di membro parziale devono essere di sola lettura, altrimenti nessuna delle due potrà esserlo
  • CS8796: Il metodo parziale deve avere modificatori di accessibilità perché ha un tipo restituito non void.
  • CS8795: Il membro parziale deve includere una parte di implementazione perché ha dei modificatori di accessibilità.
  • CS8797: Il metodo parziale deve avere dei modificatori di accessibilità perché ha dei parametri 'out'.
  • CS8798: Il metodo parziale deve avere dei modificatori di accessibilità perché ha un modificatore 'virtual', 'override', 'sealed', 'new' o 'extern'.
  • CS8799: Entrambe le dichiarazioni di membro parziale devono avere modificatori di accessibilità identici.
  • CS8800: Entrambe le dichiarazioni di membro parziale devono avere combinazioni identiche dei modificatori virtual, override, sealed e new.
  • CS8817: Entrambe le dichiarazioni di metodo parziale devono avere lo stesso tipo restituito.
  • CS8818: Le dichiarazioni di membro parziale devono avere valori restituiti ref corrispondenti.
  • CS8863: Solo una singola dichiarazione di tipo parziale può includere un elenco di parametri
  • CS8988: Il modificatore scoped del parametro non corrisponde alla definizione parziale.
  • CS9248: La proprietà parziale deve includere una parte di implementazione.
  • CS9249: La proprietà parziale deve includere una parte di definizione.
  • CS9250: Una proprietà parziale non può avere più dichiarazioni di definizione e non può essere una proprietà automatica.
  • CS9251: Una proprietà parziale non può avere più dichiarazioni di implementazione.
  • CS9252: Occorre implementare una funzione di accesso alla proprietà in quanto dichiarata nella parte di definizione
  • CS9253: La funzione di accesso alla proprietà non implementa alcuna funzione di accesso dichiarata nella parte di definizione
  • CS9254: La funzione di accesso alla proprietà deve corrispondere alla parte di definizione
  • CS9255: Entrambe le dichiarazioni di proprietà parziale devono avere lo stesso tipo.
  • CS9256: Le dichiarazioni di proprietà parziale presentano differenze di firma.
  • CS9257: Entrambe le dichiarazioni di proprietà parziale devono essere obbligatorie, altrimenti nessuna delle due potrà esserlo
  • CS9275: il membro parziale deve avere una parte di implementazione.
  • CS9276: Il membro parziale deve includere una parte definitoria.
  • CS9277: Il membro parziale non può avere più dichiarazioni definenti.
  • CS9278: Il membro parziale non può avere più di una dichiarazione di implementazione.
  • CS9279: l'evento parziale non può avere l'inizializzatore.
  • CS9280: solo la dichiarazione di implementazione di un costruttore parziale può avere un inizializzatore.

Le sezioni seguenti descrivono le cause e le correzioni per questi errori e avvisi.

Tipi parziali

  • CS0260: modificatore parziale mancante per la dichiarazione di tipo; esiste un'altra dichiarazione parziale di questo tipo
  • CS0261: le dichiarazioni parziali di tipo devono essere tutte le classi, tutti gli struct o tutte le interfacce
  • CS0262: Le dichiarazioni parziali di tipo presentano modificatori di accessibilità in conflitto
  • CS0263: Le dichiarazioni parziali di tipo non devono specificare classi di base diverse
  • CS0264: le dichiarazioni parziali di tipo devono avere gli stessi nomi dei parametri di tipo nello stesso ordine
  • CS0265: Le dichiarazioni parziali di tipo hanno vincoli incoerenti per il parametro di tipo 'type parameter'
  • CS0267: il modificatore 'partial' può essere visualizzato solo prima di 'class', 'record', 'struct', 'interface', o un metodo o un tipo restituito di proprietà.
  • CS8863: solo una singola dichiarazione di tipo parziale può avere un elenco di parametri

La dichiarazione di tipo parziale può causare l'emissione del seguente avviso da parte del compilatore:

  • CS0282: non esiste un ordinamento definito tra i campi in più dichiarazioni di tipo parziale class o struct 'type'. Per specificare un ordinamento, tutti i campi dell'istanza devono trovarsi nella stessa dichiarazione.

Questi errori si verificano quando le dichiarazioni di tipo parziale violano le regole per i tipi parziali.

  • Aggiungere il partial modificatore a tutte le dichiarazioni del tipo, perché dopo aver suddiviso un tipo tra più dichiarazioni, ogni parte deve includere la parola chiave (CS0260).
  • Assicurarsi che tutte le dichiarazioni usino la stessa parola chiave di tipo, perché la combinazione classdi , structrecord, e interface in parti diverse dello stesso tipo non è consentita (CS0261). È necessario assicurarsi che i modificatori di accesso siano coerenti in tutte le dichiarazioni, ad esempio rendendo tutte le parti public o tutte le parti internal, poiché l'accessibilità conflittuale tra dichiarazioni diverse crea ambiguità sulla visibilità prevista del tipo (CS0262).
  • Verificare che tutte le dichiarazioni specifichino la stessa classe di base, perché un tipo può ereditare da una sola classe di base, in modo che più classi di base diverse siano in conflitto (CS0263).
  • Per i tipi parziali generici, assicurarsi che tutte le dichiarazioni elencano gli stessi parametri di tipo nello stesso ordine, perché i nomi dei parametri di tipo devono corrispondere esattamente in tutte le parti (CS0264).
  • Verificare che i vincoli sui parametri di tipo rimangano coerenti in tutte le dichiarazioni, perché vincoli incoerenti creano ambiguità sui tipi che possono essere usati per i parametri di tipo (CS0265).
  • Posizionare la partial parola chiave immediatamente prima della parola chiave type (class, record, structo interface), perché la sintassi del linguaggio richiede questo ordinamento specifico (CS0267).
  • Dichiarare un costruttore primario in una sola dichiarazione parziale, perché più costruttori primari verrebbero in conflitto sui parametri del costruttore e sulla logica di inizializzazione da usare (CS8863).

Quando si dichiarano campi in più file per un tipo di struct parziale, è necessario consolidare tutte le dichiarazioni di campo in un singolo file se l'ordine di layout di memoria è importante, perché il compilatore non può garantire un ordinamento specifico quando i campi vengono suddivisi tra più file (CS0282). In alternativa, se l'ordine di layout non è rilevante, è possibile applicare System.Runtime.InteropServices.StructLayoutAttribute con il LayoutKind.Auto valore per consentire al runtime di ottimizzare automaticamente il layout.

Membri parziali

  • CS0750: Un membro parziale non può avere il modificatore 'abstract'.
  • CS0751: Un membro parziale deve essere dichiarato in una class parziale o in una struct parziale
  • CS0754: Un membro parziale non può implementare in modo esplicito un metodo di interfaccia.
  • CS0763: Entrambe le dichiarazioni di metodo parziale devono essere static, altrimenti nessuna delle due potrà essere static.
  • CS0764: Entrambe le dichiarazioni di metodo parziale devono essere unsafe, altrimenti nessuna delle due potrà essere unsafe
  • CS8142: Entrambe le dichiarazioni di membro parziale devono usare gli stessi nomi di elemento di tupla.
  • CS8663: Entrambe le dichiarazioni di membro parziale devono essere di sola lettura, altrimenti nessuna delle due potrà esserlo
  • CS8799: Entrambe le dichiarazioni di membro parziale devono avere modificatori di accessibilità identici.
  • CS8800: Entrambe le dichiarazioni di membro parziale devono avere combinazioni identiche dei modificatori virtual, override, sealed e new.
  • CS8818: Le dichiarazioni di membro parziale devono avere valori restituiti ref corrispondenti.
  • CS8988: Il modificatore scoped del parametro non corrisponde alla definizione parziale.
  • CS9275: il membro parziale deve avere una parte di implementazione.
  • CS9276: il membro parziale deve avere una parte di definizione.
  • CS9277: Il membro parziale non può avere più dichiarazioni di definizione.
  • CS9278: Il membro parziale non può avere dichiarazioni di implementazione multiple.

Questi errori si verificano quando le dichiarazioni di membri parziali violano le regole per metodi parziali, proprietà, indicizzatori ed eventi.

  • Rimuovere il abstract modificatore dai membri parziali, perché i membri astratti richiedono classi derivate per fornire implementazioni. Questo requisito è in conflitto con il modello membro parziale in cui l'implementazione viene fornita nella dichiarazione di implementazione (CS0750).
  • Dichiarare membri parziali all'interno di un tipo che include il partial modificatore, perché i membri parziali possono esistere solo in tipi parziali (CS0751).
  • Rimuovere le implementazioni esplicite dell'interfaccia dai membri parziali, perché il modello di dichiarazione in due parti non è compatibile con la sintassi esplicita dell'implementazione dell'interfaccia (CS0754).
  • Includere o omettere il static modificatore in modo coerente in entrambe le dichiarazioni, perché la combinazione di membri statici e dell'istanza creerebbe ambiguità sulla modalità di chiamata del membro (CS0763).
  • Includere o omettere il unsafe modificatore in modo coerente in entrambe le dichiarazioni, perché contesti non sicuri incoerenti potrebbero creare problemi di sicurezza o errori di compilazione (CS0764).
  • Usare nomi di elementi di tupla identici in entrambe le dichiarazioni, perché nomi diversi generano confusione sui nomi disponibili nel codice di utilizzo (CS8142).
  • Includere o omettere il modificatore readonly in modo coerente in entrambe le dichiarazioni, perché la combinazione di dichiarazioni di sola lettura e non di sola lettura crea ambiguità riguardo alla possibilità per il membro di modificare lo stato dell'istanza (CS8663).
  • Usare modificatori di accessibilità identici (ad esempio public, private, protectedo internal) in entrambe le dichiarazioni, perché diversi livelli di accessibilità sono in conflitto sulla visibilità del membro (CS8799).
  • Applicare la stessa combinazione di virtual, override, sealed e new a entrambe le dichiarazioni, perché questi modificatori controllano l'ereditarietà e il comportamento polimorfico che devono essere coerenti (CS8800).
  • Usare modificatori di restituzione corrispondenti ref in entrambe le dichiarazioni, perché un comportamento incoerente di restituzione per riferimento creerebbe problemi di sicurezza dei tipi (CS8818).
  • Applicare il scoped modificatore in modo coerente ai parametri in entrambe le dichiarazioni, perché questo modificatore controlla la durata dei parametri ref e deve corrispondere per garantire la sicurezza della memoria (CS8988).
  • Specificare una dichiarazione di implementazione per ogni membro parziale con una dichiarazione di definizione, perché i membri parziali richiedono che entrambe le parti siano complete (CS9275, CS9276).
  • Verificare che ogni membro parziale abbia esattamente una dichiarazione di definizione e una dichiarazione di implementazione, perché più dichiarazioni creerebbero ambiguità sulla definizione o sull'implementazione da usare (CS9277, CS9278).

Metodi parziali

  • CS0501: 'member function' deve dichiarare un corpo perché non è contrassegnato come abstract, extern o partial
  • CS0755: Entrambe le dichiarazioni di metodo parziale devono essere metodi di estensione, altrimenti nessuna delle due potrà esserlo.
  • CS0756: Un metodo parziale non può avere più dichiarazioni di definizione.
  • CS0757: Un metodo parziale non può avere più dichiarazioni di implementazione.
  • CS0759: Non sono state trovate dichiarazioni di definizione per la dichiarazione di implementazione del metodo parziale.
  • CS0761: Le dichiarazioni di metodo parziale del method<T> contengono vincoli incoerenti per il parametro di tipo.
  • CS0762: Non è possibile creare il delegato dal metodo perché è un metodo parziale senza una dichiarazione di implementazione
  • CS1067: Le dichiarazioni parziali devono avere gli stessi nomi di parametro di tipo e i modificatori di varianza nello stesso ordine.
  • CS8796: Il metodo parziale deve avere modificatori di accessibilità perché ha un tipo restituito non void.
  • CS8795: Il membro parziale deve includere una parte di implementazione perché ha dei modificatori di accessibilità.
  • CS8797: Il metodo parziale deve avere dei modificatori di accessibilità perché ha dei parametri 'out'.
  • CS8798: Il metodo parziale deve avere dei modificatori di accessibilità perché ha un modificatore 'virtual', 'override', 'sealed', 'new' o 'extern'.
  • CS8817: Entrambe le dichiarazioni di metodo parziale devono avere lo stesso tipo restituito.

Questi errori si verificano quando le dichiarazioni parziali del metodo violano le regole per i metodi parziali.

  • Aggiungere il partial modificatore alla dichiarazione del metodo o fornire un corpo del metodo, perché i metodi senza implementazioni devono essere contrassegnati come abstract, externo partial (CS0501).
  • Assicurarsi che entrambe le dichiarazioni includano o omettano la sintassi del metodo di estensione (this modificatore nel primo parametro) in modo coerente, perché la combinazione di dichiarazioni di estensione e non di estensione crea firme di metodi incompatibili (CS0755).
  • Rimuovere dichiarazioni di definizione duplicate (dichiarazioni senza corpi del metodo), perché ogni metodo parziale può avere una sola definizione (CS0756).
  • Rimuovere dichiarazioni di implementazione duplicate (dichiarazioni con corpi del metodo), perché ogni metodo parziale può avere una sola implementazione (CS0757).
  • Aggiungere una dichiarazione di definizione corrispondente per ogni dichiarazione di implementazione, perché ogni metodo parziale con un corpo deve avere una dichiarazione di firma corrispondente senza un corpo (CS0759).
  • Assicurarsi che i vincoli dei parametri di tipo corrispondano in entrambe le dichiarazioni, perché vincoli incoerenti creano ambiguità sui tipi validi per il metodo generico (CS0761).
  • Fornire una dichiarazione di implementazione prima di creare un delegato dal metodo, perché i delegati richiedono un'implementazione concreta del metodo a cui fare riferimento (CS0762).
  • Per i metodi parziali generici, assicurarsi che entrambe le dichiarazioni usino gli stessi nomi dei parametri di tipo e modificatori di varianza nello stesso ordine, perché le firme generiche non corrispondenti creano dichiarazioni di metodo incompatibili (CS1067).
  • Aggiungere modificatori di accessibilità espliciti (ad esempio public, private, protected, o internal) quando il metodo restituisce un tipo diverso da void, perché i metodi parziali non di tipo void devono avere definita l'accessibilità per essere chiamabili da altro codice (CS8796).
  • Fornire una dichiarazione di implementazione quando vengono specificati modificatori di accessibilità, perché i metodi parziali accessibili devono avere implementazioni da richiamare (CS8795).
  • Aggiungere modificatori di accessibilità espliciti quando il metodo ha out parametri, perché i metodi con parametri out devono avere definito l'accessibilità per essere chiamabili (CS8797).
  • Aggiungere modificatori di accessibilità espliciti quando si usano i modificatori virtual, override, sealed, new o extern, perché questi modificatori influiscono sulla visibilità dei metodi e richiedono specifiche di accessibilità esplicite (CS8798).
  • Assicurarsi che entrambe le dichiarazioni specifichino lo stesso tipo restituito, perché i diversi tipi restituiti creano firme di metodi incompatibili (CS8817).

Proprietà parziali

  • CS9248: La proprietà parziale deve includere una parte di implementazione.
  • CS9249: La proprietà parziale deve includere una parte di definizione.
  • CS9250: Una proprietà parziale non può avere più dichiarazioni di definizione e non può essere una proprietà automatica.
  • CS9251: Una proprietà parziale non può avere più dichiarazioni di implementazione.
  • CS9252: Occorre implementare una funzione di accesso alla proprietà in quanto dichiarata nella parte di definizione
  • CS9253: La funzione di accesso alla proprietà non implementa alcuna funzione di accesso dichiarata nella parte di definizione
  • CS9254: La funzione di accesso alla proprietà deve corrispondere alla parte di definizione
  • CS9255: Entrambe le dichiarazioni di proprietà parziale devono avere lo stesso tipo.
  • CS9257: Entrambe le dichiarazioni di proprietà parziale devono essere obbligatorie, altrimenti nessuna delle due potrà esserlo

La dichiarazione di proprietà o indicizzatore parziale può causare l'emissione dell'avviso seguente da parte del compilatore:

  • CS9256: Le dichiarazioni di proprietà parziale presentano differenze di firma.

Questi errori e avvisi si verificano quando le dichiarazioni di proprietà o indicizzatore parziali violano le regole per le proprietà parziali.

  • Specificare una dichiarazione di implementazione per ogni dichiarazione di definizione di proprietà parziale, perché le proprietà parziali richiedono che entrambe le parti siano complete (CS9248).
  • Specificare una dichiarazione di definizione per ogni dichiarazione di implementazione della proprietà parziale, perché ogni implementazione deve avere una definizione corrispondente (CS9249).
  • Rimuovere dichiarazioni di definizione duplicate ed evitare di usare la sintassi della proprietà automatica nella dichiarazione di implementazione, perché ogni proprietà parziale può avere una sola definizione e l'implementazione deve includere corpi di funzione di accesso espliciti (CS9250).
  • Rimuovere dichiarazioni di implementazione duplicate, perché ogni proprietà parziale può avere una sola implementazione (CS9251).
  • Implementare tutte le funzioni di accesso dichiarate nella dichiarazione di definizione, perché la dichiarazione di implementazione deve fornire corpi per ogni funzione di accesso (get, set o init) specificata nella definizione (CS9252).
  • Rimuovere le funzioni di accesso dalla dichiarazione di implementazione che non sono state dichiarate nella dichiarazione di definizione, perché è possibile implementare solo le funzioni di accesso dichiarate nella parte di definizione (CS9253).
  • Assicurarsi che le firme delle funzioni di accesso corrispondano tra entrambe le dichiarazioni, inclusi il tipo di funzione di accesso (get, set o init) e qualsiasi modificatore, perché le definizioni delle funzioni di accesso non coerenti creano dichiarazioni di proprietà incompatibili (CS9254).
  • Assicurarsi che entrambe le dichiarazioni specifichino lo stesso tipo di proprietà, perché tipi diversi creano firme di proprietà incompatibili (CS9255).
  • Assicurarsi che entrambe le dichiarazioni includano o omettano il required modificatore in modo coerente, perché la combinazione di dichiarazioni obbligatorie e non obbligatorie crea ambiguità sull'inizializzazione della proprietà (CS9257).
  • Esaminare e correggere eventuali mancate corrispondenze di firma tra le dichiarazioni di dichiarazione e implementazione, perché le differenze nei modificatori di accessibilità, nei tipi restituiti o negli elenchi di parametri (per gli indicizzatori) possono causare un comportamento imprevisto (CS9256).

Eventi e costruttori parziali

  • CS9279: l'evento parziale non può avere l'inizializzatore.
  • CS9280: solo la dichiarazione di implementazione di un costruttore parziale può avere un inizializzatore.

È stato dichiarato un inizializzatore nella dichiarazione di definizione di un costruttore parziale o in una dichiarazione di evento parziale. Rimuovere l'inizializzatore.