Não declarará tipos de referência mutável somente leitura

TypeName

DoNotDeclareReadOnlyMutableReferenceTypes

CheckId

CA2104

Category (Categoria)

Microsoft.segurança

Quebrando alterar

Não separável

Causa

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

Descrição da regra

Um tipo mutável é um tipo cujos dados de instância podem ser modificados.The System.Text.StringBuilder classe é um exemplo de um tipo de referência mutável. Ele contém membros que podem alterar o valor de uma instância da classe.Um exemplo de um tipo de referência imutáveis é o System.String classe. Depois de instanciado, seu valor nunca pode alterar.

O modificador somente leitura (somente leitura (Referência C#) em translation from VPE for Csharp, ReadOnly (Visual Basic) no Visual Basic, e const (C++) no C++) em uma referência de tipo de campo (ponteiro em C++) impede que o campo que está sendo substituído por uma instância diferente do tipo de referência mas não impede que os dados do campo instância que está sendo modificado por meio do tipo de referência.

Campos de matriz somente leitura são isentos desta regra mas em vez disso, causar uma violação do Campos de matriz não devem ser lidos apenas regra.

Como corrigir violações

Para corrigir uma violação dessa regra, remover o modificador somente leitura ou, se uma alterar significativa for aceitável, substitua o campo com tipo imutável.

Quando suprimir avisos

É seguro eliminar um aviso essa regra se o tipo de campo é imutável.

Exemplo

O exemplo a seguir mostra uma declaração de campo que causa 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()
        {
        }
    };
}