Avvisi di utilizzo
Gli avvisi di utilizzo supportano l'utilizzo corretto di .NET Framework.
In questa sezione
Regola |
Descrizione |
---|---|
Una firma di metodo include un parametro non utilizzato nel corpo del metodo. |
|
Un nuovo oggetto viene creato, ma non viene mai utilizzato oppure viene chiamato un metodo che crea e restituisce una nuova stringa e la nuova stringa non viene mai utilizzata oppure un metodo COM o P/Invoke restituisce un HRESULT o un codice di errore che non viene mai utilizzato. |
|
Un metodo che costituisce un'implementazione di Dispose non chiama GC.SuppressFinalize oppure un metodo che non costituisce un'implementazione di Dispose chiama GC.SuppressFinalize oppure un metodo chiama GC.SuppressFinalize e passa un elemento diverso da this (Me in Visual Basic). |
|
CA2200: Eseguire il rethrow per conservare i dettagli dello stack |
Viene generata di nuovo un'eccezione e quest'ultima viene specificata in modo esplicito nell'istruzione throw.Se un'eccezione viene generata di nuovo specificandola nell'istruzione throw, l'elenco di chiamate ai metodi tra il metodo originale che ha generato l'eccezione e il metodo corrente viene perso. |
Tale circostanza complica il rilevamento e il debug dell'errore originale. |
|
Un'implementazione di metodo contiene percorsi del codice che potrebbero comportare più chiamate a System.IDisposable.Dispose o a un equivalente di Dispose (ad esempio un metodo Close() per alcuni tipi) sullo stesso oggetto. |
|
CA2204: I valori letterali devono essere digitati in modo corretto |
Una stringa letterale in un corpo del metodo contiene una o più parole che non sono riconosciute dalla libreria del correttore ortografico Microsoft. |
Viene definito un metodo di platform invoke e nella libreria di classi .NET Framework è presente un metodo con la funzionalità equivalente. |
|
CA2207: Inizializzare i campi statici dei tipi di valore inline |
Un tipo di valore dichiara un costruttore statico esplicito.Per correggere una violazione di questa regola, inizializzare tutti i dati statici quando vengono dichiarati e rimuovere il costruttore statico. |
CA2208: Creare istanze di eccezioni di argomento correttamente |
Viene effettuata una chiamata al costruttore predefinito (senza parametri) di un tipo di eccezione che corrisponde a o deriva da ArgumentException oppure viene passato un argomento stringa non corretto a un costruttore con parametri di un tipo di eccezione che corrisponde a o deriva da ArgumentException. |
I campi statici che non sono costanti né in sola lettura non sono thread-safe.L'accesso a tali campi deve essere controllato attentamente e richiede tecniche di programmazione avanzate per la sincronizzazione dell'accesso all'oggetto classe. |
|
Un metodo in un tipo che eredita da System.EnterpriseServices.ServicedComponent è contrassegnato con System.Web.Services.WebMethodAttribute.Poiché WebMethodAttribute e un metodo ServicedComponent presentano comportamenti e requisiti di contesto e flusso di transazioni in conflitto tra loro, il comportamento del metodo non sarà corretto in determinati scenari. |
|
Un tipo che implementa System.IDisposable dichiara i campi di tipi che implementano anch'essi IDisposable.Il metodo Dispose del campo non viene chiamato dal metodo Dispose del tipo dichiarante. |
|
CA2214: Non chiamare metodi sottoponibili a override nei costruttori |
Quando un costruttore chiama un metodo virtuale, è possibile che il costruttore per l'istanza che richiama il metodo non sia stato eseguito. |
CA2215: I metodi Dispose devono chiamare il metodo Dispose della classe base |
Se un tipo eredita da un tipo eliminabile, deve chiamare il metodo Dispose del tipo di base dal proprio metodo Dispose. |
CA2216: I tipi Disposable devono dichiarare un finalizzatore |
Un tipo che implementa System.IDisposable e include campi che suggeriscono l'utilizzo di risorse non gestite non implementa un finalizzatore come descritto da Object.Finalize. |
CA2217: Non contrassegnare le enumerazioni con FlagsAttribute |
Un'enumerazione visibile esternamente è contrassegnata con FlagsAttribute e presenta uno o più valori che non sono potenze di due o una combinazione degli altri valori definiti nell'enumerazione. |
CA2218: Eseguire l'override di GetHashCode all'override di Equals |
GetHashCode restituisce un valore, basato sull'istanza corrente, appropriato per algoritmi di hash e strutture dei dati come una tabella hash.Due oggetti dello stesso tipo e uguali devono restituire lo stesso codice hash. |
Quando un'eccezione viene generata in una clausola finally o in una clausola fault, la nuova eccezione nasconde l'eccezione attiva.Quando un'eccezione viene generata in una clausola filter, il runtime rileva l'eccezione automaticamente.Tale circostanza complica il rilevamento e il debug dell'errore originale. |
|
CA2220: I finalizzatori devono chiamare il finalizzatore della classe base |
La finalizzazione deve essere propagata tramite la gerarchia di ereditarietà.A tale scopo, i tipi devono chiamare il metodo Finalize della classe di base nel proprio metodo Finalize. |
I finalizzatori devono utilizzare il modificatore di accesso a livello di famiglia. |
|
Non modificare il modificatore di accesso per i membri ereditati.La modifica in privato di un membro ereditato non impedisce ai chiamanti di accedere all'implementazione della classe base del metodo. |
|
CA2223: La differenza tra membri non deve limitarsi al tipo restituito |
Nonostante Common Language Runtime consenta l'utilizzo di tipi restituiti per differenziare membri altrimenti identici, questa funzionalità non è inclusa nella specifica CLS (Common Language Specification) e non è una funzionalità comune dei linguaggi di programmazione .NET. |
CA2224: Eseguire l'override di Equals all'override dell'operatore |
Un tipo pubblico implementa l'operatore di uguaglianza, ma non esegue l'override di Object.Equals. |
CA2225: Gli overload degli operatori hanno alternative con nome |
È stato rilevato un overload di operatore e il metodo alternativo denominato previsto non è stato trovato.Il membro alternativo denominato fornisce accesso alla stessa funzionalità dell'operatore e viene fornito per gli sviluppatori che programmano in linguaggi che non supportano operatori di overload. |
Un tipo implementa l'operatore di uguaglianza o di disuguaglianza e non implementa l'operatore opposto. |
|
CA2227: Le proprietà di raccolte devono essere in sola lettura |
Una proprietà di raccolta scrivibile consente a un utente di sostituire la raccolta con una raccolta diversa.Una proprietà di sola lettura interrompe la sostituzione della raccolta ma consente ancora l'impostazione dei singoli membri. |
Con le versioni supportate di .NET Framework potrebbe non essere possibile utilizzare i file di risorse compilati utilizzando versioni provvisorie di .NET Framework. |
|
Per correggere una violazione di questa regola, implementare il costruttore di serializzazione.Per una classe sealed, rendere il costruttore privato; in caso contrario renderlo protetto. |
|
Un tipo pubblico o protetto contiene un metodo pubblico o protetto che utilizza la convenzione di chiamata VarArgs anziché la parola chiave params. |
|
CA2231: Eseguire l'overload dell'operatore "uguale a" all'override di ValueType.Equals |
Un tipo di valore esegue l'override di Object.Equals, ma non implementa l'operatore di uguaglianza. |
CA2232: Contrassegnare i punti di ingresso del Windows Form con STAThread |
STAThreadAttribute indica che il modello di threading COM per l'applicazione è un apartment a thread singolo.Questo attributo deve essere presente sul punto di ingresso di qualsiasi applicazione che utilizza Windows Form; se omesso è possibile che il componente Windows non funzioni correttamente. |
Le operazioni aritmetiche non devono essere eseguite senza prima convalidare gli operandi, per assicurarsi che il risultato dell'operazione sia compreso nell'intervallo dei valori possibili per i tipi di dati utilizzati. |
|
Viene effettuata una chiamata a un metodo che dispone di un parametro di stringa il cui nome contiene "uri", "URI", "urn", "URN", "url" o "URL". Il tipo dichiarante del metodo contiene un overload del metodo corrispondente con un parametro System.Uri. |
|
Un campo di istanza di un tipo non serializzabile viene dichiarato in un tipo serializzabile. |
|
CA2236: Chiamare metodi della classe base su tipi ISerializable |
Per correggere una violazione di questa regola, chiamare il costruttore di serializzazione o il metodo GetObjectData del tipo di base dal costruttore o dal metodo del tipo derivato corrispondente. |
CA2237: Contrassegnare i tipi ISerializable con SerializableAttribute |
Affinché i tipi vengano riconosciuti come serializzabili in Common Language Runtime, è necessario che siano contrassegnati con l'attributo SerializableAttribute anche se il tipo utilizza una routine di serializzazione personalizzata tramite l'implementazione dell'interfaccia ISerializable. |
CA2238: Implementare correttamente i metodi di serializzazione |
Un metodo che gestisce un evento di serializzazione non dispone della visibilità, del tipo restituito o della firma corretta. |
CA2239: Fornire metodi di deserializzazione per i campi facoltativi |
Un tipo include un campo contrassegnato con l'attributo System.Runtime.Serialization.OptionalFieldAttribute e il tipo non fornisce metodi di gestione degli eventi di deserializzazione. |
Per correggere una violazione di questa regola, impostare il metodo GetObjectData come visibile e sottoponibile a override e accertarsi che tutti i campi di istanza siano inclusi nel processo di serializzazione o contrassegnati in modo esplicito con l'attributo NonSerializedAttribute. |
|
CA2241: Fornire argomenti corretti ai metodi di formattazione |
L'argomento format passato a System.String.Format non contiene un elemento di formato corrispondente a ogni argomento dell'oggetto o viceversa. |
Questa espressione consente di testare un valore rispetto a Single.Nan o Double.Nan.Utilizzare Single.IsNan(Single) o Double.IsNan(Double) per testare il valore. |
|
CA2243: Valori letterali stringa di attributo devono essere analizzate correttamente |
Il parametro del valore letterale stringa di un attributo non esegue l'analisi corretta di un URL, un GUID o una versione. |