Compartilhar via


CA2133: Delegados devem ligar para métodos com transparência consistente

TypeName

DelegatesMustBindWithConsistentTransparency

CheckId

CA2133

<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

Esse aviso é acionado em um método que vincula a um delegado que é marcado com o SecurityCriticalAttribute para um método que é transparente ou que está marcado com o SecuritySafeCriticalAttribute.O aviso também é acionado para um método que vincula a um delegado que é transparente ou safe essenciais para um método critical.

Descrição da regra

Tipos delegate e os métodos que eles se ligam devem possuir uma transparência consistente.Delegados transparentes e seguros críticos só poderão se ligar a outros métodos transparentes ou safe críticos.Da mesma forma, delegados críticos só poderão se ligar a métodos críticos.Essas regras de vinculação se o único código que pode chamar um método por meio de um representante pode ter também chamada o mesmo método diretamente.Por exemplo, regras de ligação impedem código transparent chame código crítico diretamente por meio de um delegado transparente.

Como corrigir violações

Para corrigir uma violação a este aviso, altere a transparência do representante ou do método que ele liga para que a transparência dos dois são equivalentes.

Quando suprimir avisos

Não suprimir um aviso da regra.

Dd997710.collapse_all(pt-br,VS.110).gifCódigo

using System;
using System.Security;

namespace TransparencyWarningsDemo
{

    public delegate void TransparentDelegate();

    [SecurityCritical]
    public delegate void CriticalDelegate();

    public class TransparentType
    {
        void DelegateBinder()
        {
            // CA2133 violation - binding a transparent delegate to a critical method
            TransparentDelegate td = new TransparentDelegate(CriticalTarget);

            // CA2133 violation - binding a critical delegate to a transparent method
            CriticalDelegate cd = new CriticalDelegate(TransparentTarget);
        }

        [SecurityCritical]
        void CriticalTarget() { }

        void TransparentTarget() { }
    }
}