Frage

Stellen Sie sich diese Aufzählung in einer DLL vor.

public enum Colors
{
    Red,
    Green
}

Bricht das Hinzufügen von Aufzählungswerten die Binärkompatibilität?Wenn ich es ändern würde, würden bestehende EXEn brechen?

public enum Colors
{
    Red,
    Green,
    Blue
}

Ich sah diese Antwort, aber es schien den Fall von anzusprechen einfügen Wert.Wenn ich Werte hinzufüge zu nur das Ende, ist das in Ordnung?

War es hilfreich?

Lösung

Nein, das bricht die Binärkompatibilität nicht (insofern als:die Assembly wird weiterhin geladen usw.), da Aufzählungen im Grunde ganzzahlige Literalkonstanten sind.Das Einfügen von Werten in die Mitte ist offensichtlich eine wirklich gefährliche Idee, aber das haben Sie bereits ausgeschlossen.

Es kann jedoch eine Reihe anderer Probleme verursachen, vor denen Sie sich schützen müssen:

  • etwas Code (switch aussagen insbesondere) dürfen die neuen Werte nicht vorwegnehmen;technisch war dies auch vorher ein Problem, da Aufzählungen nicht auf Werte überprüft werden (Aufzählungsvariablen können undefinierte Werte enthalten)
  • alles, was die verfügbaren Aufzählungen abfragt, wird zu unterschiedlichen Ergebnissen führen
    • insbesondere kann die Serialisierung und Deserialisierung unerwartet fehlschlagen, wenn Daten mit Aufzählungen vorhanden sind, die vom jeweiligen Client noch nicht erwartet werden

Andere Tipps

Es sollte in Ordnung sein, vorausgesetzt, Sie hängen nur an das Ende an.Das Bruchgefahr würde jedoch von der Tatsache stammen, dass die ENUM-Werte implizit definiert sind, beginnend mit 0

Als Beispiel, wenn Sie Ihr ENUM geändert haben:

generasacodicetagpre.

Jeder, der diese Werte in ihrer DBS gespeichert hat, würde sehen, dass Dinge, die einst rot waren, jetzt blau sind, und was grün war, ist jetzt rot.

Idealerweise sollten Sie Ihr ENUM wie so definieren:

generasacodicetagpre.

und dann, wenn Sie einen neuen hinzufügen, sollten Sie:

haben generasacodicetagpre.

Dies hilft, mögliche Versionen von möglichen Versionen zu verhindern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top