Export (0) Print
Expand All
Expand Minimize

CA2104: Do not declare read only mutable reference types







Breaking Change


An externally visible type contains an externally visible read-only field that is a mutable reference type.

A mutable type is a type whose instance data can be modified. The System.Text::StringBuilder class is an example of a mutable reference type. It contains members that can change the value of an instance of the class. An example of an immutable reference type is the System::String class. After it has been instantiated, its value can never change.

The read-only modifier (readonly (C# Reference) in C#, ReadOnly (Visual Basic) in Visual Basic, and const (C++) in C++) on a reference type field (pointer in C++) prevents the field from being replaced by a different instance of the reference type. However, the modifier does not prevent the instance data of the field from being modified through the reference type.

Read-only array fields are exempt from this rule but instead cause a violation of the CA2105: Array fields should not be read only rule.

To fix a violation of this rule, remove the read-only modifier or, if a breaking change is acceptable, replace the field with an immutable type.

It is safe to suppress a warning from this rule if the field type is immutable.

The following example shows a field declaration that causes a violation of this rule.

using namespace System;
using namespace System::Text;

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

        static MutableReferenceTypes()
© 2014 Microsoft