CA1812: Unikaj wewnętrznych klas bez wystąpień
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1812 |
Tytuł | Unikaj klas wewnętrznych bez wystąpień |
Kategoria | Wydajność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Nie. |
Przyczyna
Typ wewnętrzny (poziom zestawu) nigdy nie jest tworzone.
Opis reguły
Ta reguła próbuje zlokalizować wywołanie do jednego z konstruktorów typu i zgłasza naruszenie, jeśli nie zostanie znalezione wywołanie.
Następujące typy nie są badane przez tę regułę:
- Typy wartości
- Typy abstrakcyjne
- Wyliczenia
- Delegaci
- Typy tablic emitowanych przez kompilator
- Typy, których nie można utworzyć, i które definiują
static
tylko metody.
Jeśli zastosujesz się System.Runtime.CompilerServices.InternalsVisibleToAttribute do zestawu, który jest analizowany, ta reguła nie flaguje typów oznaczonych jako internal
(Friend
w Visual Basic), ponieważ pole może być używane przez zestaw znajomy. Aby mimo to przeanalizować zestaw, zobacz Konfigurowanie kodu do analizy.
Jak naprawić naruszenia
Aby naprawić naruszenie tej reguły, usuń typ lub dodaj kod, który go używa. Jeśli typ zawiera tylko static
metody, dodaj static
modyfikator do typu, aby uniemożliwić kompilatorowi emitowanie domyślnego konstruktora wystąpienia publicznego.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie z tej reguły. Zalecamy pominięcie tego ostrzeżenia w następujących sytuacjach:
Klasa jest tworzona za pomocą metod odbicia z opóźnieniem, takich jak System.Activator.CreateInstance.
Klasa jest rejestrowana w kontenerze inwersji kontroli (IoC) w ramach wzorca wstrzykiwania zależności.
Klasa jest tworzona automatycznie przez środowisko uruchomieniowe lub ASP.NET. Niektóre przykłady automatycznie utworzonych klas to te, które implementują System.Configuration.IConfigurationSectionHandler program lub System.Web.IHttpHandler.
Klasa jest używana jako parametr typu w definicji klasy i ma
new
ograniczenie. Poniższy przykład będzie oflagowany przez regułę CA1812:internal class MyClass { public void DoSomething() { } } public class MyGeneric<T> where T : new() { public T Create() { return new T(); } } MyGeneric<MyClass> mc = new MyGeneric<MyClass>(); mc.Create();
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1812
// The code that's violating the rule is on this line.
#pragma warning restore CA1812
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1812.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Konfigurowanie kodu do analizowania
Użyj następującej opcji, aby skonfigurować, które części bazy kodu mają być uruchamiane w tej regule.
Tę opcję można skonfigurować tylko dla tej reguły, dla wszystkich reguł, do których ma ona zastosowanie, lub dla wszystkich reguł w tej kategorii (wydajność), których dotyczy. Aby uzyskać więcej informacji, zobacz Opcje konfiguracji reguły jakości kodu.
Ignoruj atrybut InternalsVisibleTo
Domyślnie ta reguła jest wyłączona, jeśli analizowany zestaw używa InternalsVisibleToAttribute do uwidocznienia jego symboli wewnętrznych. Aby określić, że reguła powinna być uruchamiana nawet wtedy, gdy zestaw jest oznaczony za pomocą InternalsVisibleToAttributepolecenia , dodaj następującą parę klucz-wartość do pliku editorconfig w projekcie:
dotnet_code_quality.CAXXXX.ignore_internalsvisibleto = true
Ta opcja jest dostępna począwszy od platformy .NET 8.