CA2132: Construtores padrão devem ser pelo menos tão importantes como construtores do tipo base padrão

TypeName

DefaultConstructorsMustHaveConsistentTransparency

CheckId

CA2132

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

ObservaçãoObservação

Este aviso só é aplicado ao código que está executando o CoreCLR (a versão do CLR é específico para aplicativos da Web do Silverlight).

Causa

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

Descrição da regra

Tipos e membros que possuem o SecurityCriticalAttribute não pode ser usado por código de aplicativo do Silverlight. Membros e tipos de segurança crítica podem ser usados somente pelo código confiável na.NET Framework para a biblioteca de classes do Silverlight. Porque uma construção pública ou protegida em uma classe derivada deve ter a transparência igual ou maior que sua classe base, uma classe em um aplicativo não pode ser derivada uma classe marcada SecurityCritical.

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

Como corrigir violações

Para corrigir a violação, remover o tipo ou não derivado de tipo de segurança não transparente.

Quando suprimir avisos

Não suprimir avisos dessa regra. Violações desta regra pelo código do aplicativo resultará no CoreCLR se recusando a carregar o tipo com uma 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() { }
    }
}