In C# möchte ich "intelligente" Enums machen, ähnlich wie es in Java möglich ist, wo es mehr Informationen gibt, die an einen Enum-Wert angehängt sind als nur das darunterliegende int. Ich war gerade auf einem Schema, eine Klasse zu machen (statt eines ENUM), wie in der folgenden einfachen Beispiel:C# -Mutabilität - VS-Code-Analyse gibt mir CA2104? Scheint ... arm. Missverständnis ich?
public sealed class C
{
public static readonly C C1 = new C(0, 1);
public static readonly C C2 = new C(2, 3);
private readonly int x;
private readonly int y;
private C(int x, int y)
{
this.x = x;
this.y = y;
}
public int X
{
get
{
return this.x;
}
}
public int Y
{
get
{
return this.y;
}
}
}
Aber wenn ich Visual Studio „Code Analyzer“ auf das laufen, es gibt mir C2104 Warnung " Deklarierbare schreibgeschützte Referenztypen nicht deklarieren ".
Ich bekomme, warum Sie im Allgemeinen nicht möchten, read-only veränderbare Referenztypen zu deklarieren, aber ... meine Klasse ist nicht änderbar, oder?
Wenn Sie die Dokumente für die Warnung lesen, scheint es, als würden sie nur davon ausgehen, dass jeder schreibgeschützte Referenztyp änderbar ist. Zum Beispiel sagt es, dass, wenn der Typ wirklich unveränderlich ist, dann zögern Sie diese Warnung zu unterdrücken. Und in der Tat gibt es mir die gleiche Warnung für die folgende noch einfachere Klasse:
public sealed class C
{
public static readonly C C1 = new C();
public static readonly C C2 = new C();
private C()
{
}
}
So, OK, es sei denn, ich ernsthaft Veränderlichkeit Mißverständnis bin, ist CA2104 nicht verstehen. Und es ist meine Empfehlung, die Warnung für jede Zeile, in der sie auftaucht, zu unterdrücken, solange ich sicher bin, dass die Klasse wirklich unveränderlich ist. Aber:
(1) Also, wenn ich diese Prüfung vollständig abwende, muss ich es jedes Mal unterdrücken, wenn ich jemals ein unveränderliches Nur-Lese-Mitglied verwende, das ich HUNDERTE von Zeiten für eine gegebene Aufzählung tun könnte?
(2) Aber schlimmer, auch wenn ich das tue, dann kann jemand später versehentlich die Veränderlichkeit einführen, aber jemand anderes wird immer noch das falsche Gefühl der Sicherheit haben, dass jemand die Unterdrückung dort mit der Aussage "Ich habe überprüft und das ist unveränderlich "?
Ich hatte eine ähnliche Frage: http://stackoverflow.com/questions/15740025/the-ca2104-warning-is-there-any-way-to-mark-a-class-as-immutable- zu unterdrücken –