CA2104: Nie deklaruj zmiennych typów referencyjnych tylko do odczytu
TypeName |
DoNotDeclareReadOnlyMutableReferenceTypes |
CheckId |
CA2104 |
Kategoria |
Microsoft.Security |
Złamanie zmiany |
Bez podziału |
Przyczyna
Typ widocznych zewnętrznie zawiera widoczne z zewnątrz pola tylko do odczytu, który jest typem odwołania i mutable.
Opis reguły
Typ mutable jest typu, którego dane wystąpienie, które mogą być modyfikowane.StringBuilder Klasy jest przykładem typu mutable odniesienia.Zawiera elementy członkowskie, które można zmienić wartość instancji klasy.Na przykład typ odwołania niezmienne String klasy.Po zostały utworzone, nigdy nie można zmienić jej wartość.
Modyfikator tylko do odczytu (readonly (odwołanie w C#) w C# ReadOnly (Visual Basic) w Visual Basic, i const (C++) w języku C++) na odwołanie w polu Typ (wskaźnik w języku C++) zapobiega pole zastępowana przez różnych instancji typu odwołania.Jednakże modyfikator nie zapobiega danych instancji pola modyfikowane za pomocą typu odwołania.
Pola tylko do odczytu tablicy są zwolnione od tej reguły, ale zamiast powodować naruszenie CA2105: Pola tablicy nie powinny być tylko do odczytu reguły.
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady, usuń modyfikator tylko do odczytu lub zmiana podziału jest dopuszczalna, Zastąp pole z typem niezmienne.
Kiedy do pomijania ostrzeżenia
Bezpiecznie wyłączyć ostrzeżenie od tej reguły, jeśli typem pola jest niezmienna.
Przykład
Poniższy przykład przedstawia deklaracji pola, która powoduje naruszenie tej zasady.
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()
{
}
};
}