Errori e avvisi relativi alle dichiarazioni di tipi partial
e membri partial
Esistono numerosi errori relativi alle dichiarazioni di tipi partial
e membri 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
opartial
- CS0750: Un membro parziale non può avere il modificatore '
abstract
'. - CS0751: Un membro parziale deve essere dichiarato in una
class
parziale o in unastruct
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à esserestatic
. - CS0764: Entrambe le dichiarazioni di metodo parziale devono essere
unsafe
, altrimenti nessuna delle due potrà essereunsafe
- 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
enew
. - 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
- CS9258: in questa versione del linguaggio la parola chiave '
field
' viene associata a un campo sottostante sintetizzato per la proprietà . Per evitare di generare un campo sottostante sintetizzato e fare riferimento al membro esistente, usare invece 'this.field
' o '@field
'. - CS9263: una proprietà parziale non può avere un inizializzatore sia nella definizione che nell'implementazione.
Per le proprietà supportate dal campo è possibile generare gli avvisi seguenti:
- CS9264: la proprietà non nullable deve contenere un valore non Null quando si esce dal costruttore. Prendere in considerazione l'aggiunta del modificatore 'required' o la dichiarazione della proprietà come nullable o l'aggiunta di attributi '
[field: MaybeNull, AllowNull]
'.* - CS9266: una funzione di accesso della proprietà deve usare '
field
' perché l'altra funzione di accesso la usa.
Le sezioni seguenti descrivono le cause e le correzioni per questi errori e avvisi.
Tipi parziali
- 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. - CS8863: Solo una singola dichiarazione di tipo parziale può includere un elenco di parametri
La dichiarazione di tipo parziale può causare l'emissione del seguente avviso da parte del compilatore:
- CS0282: Non è stato definito nessun ordine tra i campi in più dichiarazioni di classe
class
ostruct
parziale 'type'. Per specificare un ordine, tutti i campi dell'istanza devono essere inclusi nella stessa dichiarazione.
Per qualsiasi tipo parziale, la parola chiave partial
deve precedere immediatamente class
, record
, struct
o interface
. Il compilatore genera un errore se la parola chiave compare in qualsiasi altro ordine. In aggiunta:
- Tutte le dichiarazioni di un tipo parziale devono corrispondere in termini di tipo (
class
,struct
,record class
,record struct
,readonly struct
oreadonly record struct
). - Tutte le dichiarazioni devono includere il modificatore
partial
. - Le dichiarazioni di un tipo parziale generico devono includere gli stessi parametri di tipo nello stesso ordine.
Alcune parti della dichiarazione non devono essere ripetute in tutte le dichiarazioni di un tipo. Tuttavia, se questi elementi vengono ripetuti in più dichiarazioni partial
, devono corrispondere:
- Qualsiasi modificatore di accesso, ad esempio
public
. - Qualsiasi classe base o interfaccia implementata.
- Qualsiasi vincolo sui parametri di tipo.
Un costruttore primario può essere dichiarato al massimo in una dichiarazione per tipo parziale.
Il compilatore avvisa se sono presenti più campi dichiarati in più file per un tipo partial struct
. Se l'ordine di layout è importante, occorre dichiarare tutti i campi nello stesso file. Se l'ordine non è importante, è possibile usare System.Runtime.InteropServices.StructLayoutAttribute con il valore LayoutKind.Auto.
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 unastruct
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à esserestatic
. - CS0764: Entrambe le dichiarazioni di metodo parziale devono essere
unsafe
, altrimenti nessuna delle due potrà essereunsafe
- 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
enew
. - CS8818: Le dichiarazioni di membro parziale devono avere valori restituiti
ref
corrispondenti. - CS8988: Il modificatore
scoped
del parametro non corrisponde alla definizione parziale.
I membri parziali hanno due dichiarazioni. La dichiarazione senza implementazione è la dichiarazione dichiarante. La dichiarazione con implementazione è la dichiarazione di implementazione. I membri parziali sono consentiti solo in un tipo partial
. I membri parziali non possono essere abstract
. I membri parziali non possono implementare in modo esplicito un'interfaccia. Entrambe le dichiarazioni di un membro parziale devono avere firme identiche. Ad esempio, entrambe o nessuna delle dichiarazioni può includere i modificatori static
o unsafe
.
Metodi parziali
- CS0501: 'member function' deve dichiarare un corpo perché non è contrassegnato come
abstract
,extern
opartial
- 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.
Alcune dichiarazioni di metodo partial
non richiedono una dichiarazione di implementazione. Ovvero, se il membro restituisce void
, non dichiara modificatori di accesso (incluso il modificatore private
predefinito) e non include alcun modificatore virtual
, override
, sealed
o new
. In caso contrario, qualsiasi metodo parziale deve includere sia le dichiarazioni dichiaranti che le dichiarazioni di implementazione.
Quando un metodo parziale include una dichiarazione di implementazione, entrambe le dichiarazioni devono essere identiche. È possibile definire esattamente una dichiarazione di implementazione.
Proprietà parziali
Gli errori seguenti indicano errori nelle dichiarazioni di proprietà o indicizzatori 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
L'avviso seguente indica una differenza di firma nelle dichiarazioni dichiaranti e di implementazione in una proprietà parziale:
- CS9256: Le dichiarazioni di proprietà parziale presentano differenze di firma.
Una proprietà o un indicizzatore parziale deve avere sia una dichiarazione dichiarante che una dichiarazione di implementazione. Le firme per entrambe le dichiarazioni devono corrispondere. Poiché la dichiarazione dichiarante usa la stessa sintassi di una proprietà implementata automaticamente, la dichiarazione di implementazione non può essere una proprietà implementata automaticamente. Le funzioni di accesso devono avere almeno un corpo della funzione di accesso. A partire da C# 13, è possibile usare la field
parola chiave per dichiarare una funzione di accesso usando una sintassi concisa:
public partial int ImplementingDeclaration { get => field; set; }
proprietà supportate dal campo
- CS9258: in questa versione del linguaggio la parola chiave '
field
' viene associata a un campo sottostante sintetizzato per la proprietà . Per evitare di generare un campo sottostante sintetizzato e fare riferimento al membro esistente, usare invece 'this.field
' o '@field
'. - CS9263: una proprietà parziale non può avere un inizializzatore sia nella definizione che nell'implementazione.
- CS9264: la proprietà non nullable deve contenere un valore non Null quando si esce dal costruttore. Prendere in considerazione l'aggiunta del modificatore 'required' o la dichiarazione della proprietà come nullable o l'aggiunta di attributi '
[field: MaybeNull, AllowNull]
'.* - CS9266: una funzione di accesso della proprietà deve usare '
field
' perché l'altra funzione di accesso la usa.
Importante
La field
parola chiave è una funzionalità di anteprima in C# 13. È necessario usare .NET 9 e impostare l'elemento <LangVersion>
su preview
nel file di progetto per usare la field
parola chiave contestuale.
È consigliabile prestare attenzione usando la funzionalità parola field
chiave in una classe con un campo denominato field
. La nuova field
parola chiave ombreggiate un campo denominato field
nell'ambito di una funzione di accesso alle proprietà. È possibile modificare il nome della field
variabile oppure usare il @
token per fare riferimento all'identificatore field
come @field
. Per altre informazioni, leggere la specifica della funzionalità per la field
parola chiave .
A partire da C# 13, la funzionalità di anteprima, field
le proprietà supportate consentono di accedere al campo sottostante sintetizzato dal compilatore per una proprietà. CS9258 indica che si dispone di una variabile denominata field
, che può essere nascosta dalla parola chiave field
contestuale .
CS9263 indica che la dichiarazione di dichiarazione include un'implementazione. Tale implementazione potrebbe accedere al campo sottostante sintetizzato dal compilatore per tale proprietà. CS9264 indica che l'uso di field
presuppone un campo sottostante non nullable mentre la dichiarazione di proprietà è nullable. Il compilatore presuppone che il campo sottostante e la proprietà abbiano lo stesso valore Nullbility. È necessario aggiungere l'attributo [field:MaybeNull, AllowNull]
alla dichiarazione di proprietà per indicare che il field
valore deve essere considerato nullable. CS9266 indica che una delle funzioni di accesso di una proprietà usa la field
parola chiave , ma l'altra usa un campo sottostante dichiarato a mano. L'avviso indica che è possibile che l'operazione sia stata eseguita per errore.