CA2104: Schreibgeschützte änderbare Referenztypen nicht deklarieren.
Element | Wert |
---|---|
RuleId | CA2104 |
Category | Microsoft.Security |
Unterbrechende Änderung | Nicht unterbrechend |
Hinweis
Regel CA2104 ist veraltet und wird in einer zukünftigen Version von Visual Studio entfernt. Aufgrund der komplizierten Analyse, die erforderlich ist, um die tatsächliche Unveränderlichkeit eines Typs zu bestimmen, wird sie nicht als Analysetool implementiert.
Ursache
Ein extern sichtbarer Typ enthält ein extern sichtbares schreibgeschütztes Feld, bei dem es sich um einen änderbaren Referenztyp handelt.
Hinweis
Diese Regel wurde als veraltet markiert. Weitere Informationen finden Sie unter Veraltete Regeln.
Regelbeschreibung
Ein änderbarer Typ ist ein Typ, dessen Instanzdaten geändert werden können. Die System.Text.StringBuilder-Klasse ist ein Beispiel für einen veränderlichen Verweistyp. Sie enthält Member, die den Wert einer Instanz der Klasse ändern können. Ein Beispiel für einen unveränderlichen Verweistyp ist die System.String-Klasse. Nachdem sie instanziiert wurde, kann sich ihr Wert nie ändern.
Der schreibgeschützte Modifizierer (readonly in C#, ReadOnly in Visual Basic und const in C++) für ein Verweistypfeld (oder Zeiger in C++) verhindert, dass das Feld durch eine andere Instanz des Verweistyps ersetzt wird. Der Modifizierer verhindert jedoch nicht, dass die Instanzdaten des Felds durch den Verweistyp geändert werden.
Diese Regel kann fälschlicherweise einen Verstoß für einen Typ anzeigen, der eigentlich unveränderlich ist. In diesem Fall kann eine Warnung von dieser Regel problemlos unterdrückt werden.
Schreibgeschützte Arrayfelder stellen eine Ausnahme von dieser Regel dar, sie verursachen jedoch einen Verstoß gegen die Regel CA2105: Arrayfelder dürfen nicht schreibgeschützt sein.
Behandeln von Verstößen
Um Verstöße gegen diese Regel zu beheben, entfernen Sie den schreibgeschützten Modifizierer, oder ersetzen Sie das Feld durch einen unveränderlichen Typ, wenn ein Breaking Change akzeptabel ist.
Wann sollten Warnungen unterdrückt werden?
Wenn der Feldtyp unveränderlich ist, kann eine Warnung von dieser Regel problemlos unterdrückt werden.
Beispiel
Das folgende Beispiel zeigt eine Felddeklaration, die einen Verstoß gegen diese Regel verursacht:
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für