Compartilhar via


CA2104: não declarar tipos de referência mutáveis somente leitura

TypeName

DoNotDeclareReadOnlyMutableReferenceTypes

CheckId

CA2104

Categoria

Microsoft.Security

Alteração Significativa

Sem quebra

Causa

Um tipo externamente visível contém um campo somente leitura externamente visível que é um tipo mutável de referência.

Descrição da Regra

Um tipo mutável é um tipo cujos dados da instância sejam modificadas.A classe de StringBuilder é um exemplo de um tipo mutável de referência.Contém membros que podem alterar o valor de uma instância da classe.Um exemplo de um imutável tipo de referência é a classe de String .Depois que foi criado uma instância do, seu valor nunca pode ser alterado.

O modificador somente leitura (readonly (Referência de C#) no C#, ReadOnly (Visual Basic) em Visual Basic, e const (C++) em C++) em um campo do tipo de referência (ponteiro em C++) evitam que o campo seja substituído por uma instância diferente do tipo de referência.Porém, o modificador não impede que os dados da instância do campo sejam alterados por meio do tipo de referência.

Os campos somente leitura da matriz são isentos desta regra causam mas em vez de uma violação de regra de CA2105: os campos da matriz não devem ser somente leitura .

Como Corrigir Violações

Para corrigir uma violação desta regra, remova o modificador somente leitura ou, se uma alteração for aceitável, substitua o campo com um tipo imutável.

Quando Suprimir Alertas

É seguro suprimir um aviso dessa regra se o tipo de campo é imutável.

Exemplo

O exemplo a seguir mostra uma declaração de campo que faz com que uma violação desta regra.

Imports System
Imports System.Text

Namespace SecurityLibrary

    Public Class MutableReferenceTypes

        Shared Protected ReadOnly SomeStringBuilder As StringBuilder

        Shared Sub New()
            SomeStringBuilder = New StringBuilder()
        End Sub 

    End Class 

End Namespace
using System;
using System.Text;

namespace SecurityLibrary
{
    public class MutableReferenceTypes
    {
        static protected readonly StringBuilder SomeStringBuilder;

        static MutableReferenceTypes()
        {
            SomeStringBuilder = new StringBuilder();
        }
    }
}
using namespace System;
using namespace System::Text;

namespace SecurityLibrary
{
    public ref class MutableReferenceTypes
    {
    protected:
        static StringBuilder^ const SomeStringBuilder = 
           gcnew StringBuilder();

    private:
        static MutableReferenceTypes()
        {
        }
    };
}