Partilhar via


CA2132: os construtores padrão devem ser pelo menos críticos como construtores padrão do tipo base

TypeName

DefaultConstructorsMustHaveConsistentTransparency

CheckId

CA2132

Categoria

Microsoft.Security

Alteração Significativa

Quebra

ObservaçãoObservação

Esse aviso é aplicado somente ao código que está executando o CoreCLR (a versão do CLR que é específica para aplicativos Web do Silverlight).

Causa

O atributo de transparência do construtor padrão de uma classe derivada não é tão importante quanto a transparência da classe base.

Descrição da Regra

Os tipos e os membros que têm SecurityCriticalAttribute não podem ser usados pelo código de aplicativo do Silverlight.Os tipos de segurança importantes e os membros podem ser usados apenas pelo código de confiança no.NET Framework para a biblioteca de classes do Silverlight.Como um público ou uma construção seguras em uma classe derivada devem ter o mesmo ou a transparência maior que a sua classe base, uma classe em um aplicativo não pode ser derivada de uma SecurityCritical marcado classe.

Para o código da plataforma de CoreCLR, se um tipo de base tem um construtor público ou padrão não transparente protegido no tipo derivado deve obedecer as regras padrão de herança de construtor.O tipo derivado também deve ter um construtor padrão e o construtor deve ser pelo menos crítico como o construtor padrão do tipo de base.

Como Corrigir Violações

Para corrigir a violação, remova o tipo ou não o derivar do tipo não transparente de segurança.

Quando Suprimir Alertas

Não suprima avisos desta regra.As violações desta regra pelo código de aplicativo resultarão na CoreCLR que não permite carregar o tipo com TypeLoadException.

Código

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() { }
    }
}