CA1812: Vyhněte se nevytvořeným instancím vnitřních tříd
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1812 |
Název | Vyhněte se nevytvořeným instancím interních tříd |
Kategorie | Výkon |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | No |
Příčina
Interní typ (na úrovni sestavení) se nikdy nesrovná.
Popis pravidla
Toto pravidlo se pokusí najít volání jednoho z konstruktorů typu a hlásí porušení, pokud se nenajde žádné volání.
Toto pravidlo nezkoumá následující typy:
- Typy hodnot
- Abstraktní typy
- Výčty
- Delegáti
- Typy polí generovaných kompilátorem
- Typy, které nelze vytvořit instanci a které definují
static
pouze metody.
Pokud použijete System.Runtime.CompilerServices.InternalsVisibleToAttribute pro analyzované sestavení, toto pravidlo ve výchozím nastavení neoznačuje typy, které jsou ve Visual Basicu označené jako internal
(Friend
v jazyce Visual Basic), protože pole může být použito přátelským sestavením. Chcete-li přesto analyzovat sestavení, přečtěte si téma Konfigurace kódu pro analýzu.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, odeberte typ nebo přidejte kód, který ho používá. Pokud typ obsahuje pouze static
metody, přidejte static
modifikátor do typu, aby zabránil kompilátoru v generování výchozího konstruktoru veřejné instance.
Kdy potlačit upozornění
Je bezpečné potlačit upozornění z tohoto pravidla. Toto upozornění doporučujeme potlačit v následujících situacích:
Třída se vytváří prostřednictvím metod reflexe s pozdní vazbou, například System.Activator.CreateInstance.
Třída je zaregistrována v kontejneru Inversion of Control (IoC) jako součást vzoru injektáže závislostí.
Třída je vytvořena automaticky modulem runtime nebo ASP.NET. Mezi příklady automaticky vytvořených tříd patří ty, které implementují System.Configuration.IConfigurationSectionHandler nebo System.Web.IHttpHandler.
Třída se používá jako parametr typu v definici třídy a má
new
omezení. Následující příklad bude označen příznakem pravidla 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();
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1812
// The code that's violating the rule is on this line.
#pragma warning restore CA1812
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1812.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Konfigurace kódu pro analýzu
Pomocí následující možnosti nakonfigurujte, ve kterých částech základu kódu se má toto pravidlo spouštět.
Tuto možnost můžete nakonfigurovat jenom pro toto pravidlo, pro všechna pravidla, která platí, nebo pro všechna pravidla v této kategorii (Výkon), na která platí. Další informace naleznete v tématu Možnosti konfigurace pravidla kvality kódu.
Ignorovat atribut InternalsVisibleTo
Ve výchozím nastavení je toto pravidlo zakázáno, pokud analyzované sestavení používá InternalsVisibleToAttribute k zveřejnění svých vnitřních symbolů. Chcete-li určit, že pravidlo by se mělo spustit i v případě, že je sestavení označeno InternalsVisibleToAttribute, přidejte do souboru .editorconfig v projektu následující dvojici klíč-hodnota:
dotnet_code_quality.CAXXXX.ignore_internalsvisibleto = true
Poznámka
Nahraďte XXXX
část CAXXXX
ID příslušného pravidla.
Tato možnost je dostupná od verze .NET 8.