Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA1822 |
| Title | Contrassegna i membri come statici |
| Categoria | Prestazioni |
| La correzione causa un'interruzione o meno | Non di rilievo: se il membro non è visibile all'esterno dell'assembly, indipendentemente dalla modifica apportata. Non di rilievo: se si modifica semplicemente il membro in un membro dell'istanza con la this parola chiave .Interruzione: se si modifica il membro da un membro dell'istanza a un membro statico ed è visibile all'esterno dell'assembly. |
| Abilitato per impostazione predefinita in .NET 10 | Come suggerimento |
Causa
Un membro che non accede ai dati dell'istanza non è contrassegnato come statico (Condiviso in Visual Basic).
Descrizione regola
I membri che non accedono ai dati dell'istanza o chiamano i metodi dell'istanza possono essere contrassegnati come statici (Condivisi in Visual Basic). Tramite il compilatore verranno quindi inviati siti di chiamata non virtuali a tali membri. L'emissione di punti di chiamata non virtuali impedirà un controllo in fase di esecuzione per ciascuna chiamata che verifica che il puntatore dell'oggetto corrente non sia null. In questo modo è possibile ottenere un miglioramento delle prestazioni misurabile per il codice sensibile alle prestazioni. In alcuni casi, l'errore di accesso all'istanza dell'oggetto corrente rappresenta un problema di correttezza.
Come correggere le violazioni
Contrassegnare il membro come statico (o Condiviso in Visual Basic) o usare 'this'/'Me' nel corpo del metodo, se appropriato.
Example
public class Printer
{
private readonly List<char> _items = [
'H', 'e', 'l', 'l', 'o',
];
public void PrintHello()
{
BadPrintHelloInternal();
GoodPrintHelloInternal();
GoodPrintHelloStaticInternal();
}
// This method violates the rule.
private void BadPrintHelloInternal()
{
Console.WriteLine("Hello");
}
// This methods satisfies the rule.
private void GoodPrintHelloInternal()
{
Console.WriteLine(string.Join(string.Empty, this._items));
}
private static void GoodPrintHelloStaticInternal()
{
Console.WriteLine("Hello");
}
}
Quando eliminare gli avvisi
È possibile eliminare un avviso da questa regola per il codice fornito in precedenza per il quale la correzione sarebbe una modifica che causa un'interruzione.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1822
// The code that's violating the rule is on this line.
#pragma warning restore CA1822
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1822.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Configurare il codice da analizzare
Usare l'opzione seguente per configurare le parti della codebase in cui eseguire questa regola.
È possibile configurare questa opzione solo per questa regola, per tutte le regole a cui si applica o per tutte le regole di questa categoria (prestazioni) a cui si applica. Per altre informazioni, vedere Opzioni di configurazione delle regole di qualità del codice.
Includere superfici API specifiche
È possibile configurare le parti della codebase in modo da eseguire questa regola in base alla relativa accessibilità impostando l'opzione api_surface. Ad esempio, per specificare che la regola deve essere eseguita solo sulla superficie dell'API non pubblica, aggiungere la coppia chiave-valore seguente a un file con estensione editorconfig nel progetto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Nota
Sostituire la parte XXXX di CAXXXX con l'ID della regola applicabile.