CA2132: Konstruktory domyślne muszą być co najmniej tak krytyczne, jak podstawowe konstruktory domyślne
TypeName |
DefaultConstructorsMustHaveConsistentTransparency |
CheckId |
CA2132 |
Kategoria |
Microsoft.Security |
Złamanie zmiany |
Złamanie |
[!UWAGA]
Ostrzeżenie to jest stosowane tylko do kodu, który działa CoreCLR (wersja środowiska CLR specyficzne dla aplikacji sieci Web dodatku Silverlight).
Przyczyna
Atrybut przezroczystości domyślnego konstruktora klasy dziedziczącej nie jest tak ważne, jak przezroczystość klasy podstawowej.
Opis reguły
Typy i elementy członkowskie, których SecurityCriticalAttribute nie używane przez kod aplikacji Silverlight.Typy zabezpieczeń krytycznych i członkowie mogą być używane tylko przez zaufanego kodu w.NET Framework dodatek Silverlight Biblioteka klas.Ponieważ publiczne lub chronionych konstrukcji w klasie pochodnej musi mieć przejrzystości takie same lub większe niż swojej klasy bazowej, klasy w aplikacji nie może pochodzić z klasy, oznaczone skupią.
Kod platformy, CoreCLR Jeśli typ podstawowy ma publicznych lub chronionych nieprzezroczystych domyślnego konstruktora następnie typu pochodnego muszą przestrzegać zasad dziedziczenia konstruktora domyślnego.Typu pochodnego również musi mieć konstruktora domyślnego i że konstruktora musi być co najmniej jako krytyczne domyślnego konstruktora typu bazowego.
Jak naprawić naruszenia
Aby naprawić naruszenia, usunięcie typu, lub pochodzi od typu nieprzezroczystych zabezpieczeń.
Kiedy do pomijania ostrzeżenia
Nie pomija ostrzeżenia, od tej reguły.Naruszenie tej zasady przez kod aplikacji spowoduje CoreCLR, odmowy załadować typu z TypeLoadException.
Kod
using System;
using System.Security;
namespace TransparencyWarningsDemo
{
public class BaseWithSafeCriticalDefaultCtor
{
[SecuritySafeCritical]
public BaseWithSafeCriticalDefaultCtor() { }
}
public class DerivedWithNoDefaultCtor : BaseWithSafeCriticalDefaultCtor
{
// CA2132 violation - since the base has a public or protected non-transparent default .ctor, the
// derived type must also have a default .ctor
}
public class DerivedWithTransparentDefaultCtor : BaseWithSafeCriticalDefaultCtor
{
// CA2132 violation - since the base has a safe critical default .ctor, the derived type must have
// either a safe critical or critical default .ctor. This is fixed by making this .ctor safe critical
// (however, user code cannot be safe critical, so this fix is platform code only).
DerivedWithTransparentDefaultCtor() { }
}
public class BaseWithCriticalCtor
{
[SecurityCritical]
public BaseWithCriticalCtor() { }
}
public class DerivedWithSafeCriticalDefaultCtor : BaseWithSafeCriticalDefaultCtor
{
// CA2132 violation - since the base has a critical default .ctor, the derived must also have a critical
// default .ctor. This is fixed by making this .ctor critical, which is not available to user code
[SecuritySafeCritical]
public DerivedWithSafeCriticalDefaultCtor() { }
}
}