Imagine this enum in a DLL.
public enum Colors
{
Red,
Green
}
Does adding enum values break binary compatibility? If I were to change it, would existing EXEs break?
public enum Colors
{
Red,
Green,
Blue
}
I saw this answer, but it seemed to address the case of inserting a value. If I add values to the end only, is that OK?
No, this doesn't break binary compatibility (in as much as: the assembly will still load etc), because enums are basically integer literal constants. Inserting values in the middle is obviously a really dangerous idea, but you've already excluded that.
However, it can cause a number of other issues that you need to guard against:
switch
statements in particular) may not anticipate the new values; technically this was an issue before too, since enums are not value-checked (enum variables can contain undefined values)It should be fine, assuming you only append to the end. However, the risk of breaking would come from the fact that the enum values are implicitly defined, starting at 0. So if someone is persisting the values to a DB, you risk changing which values they map to.
As an example, if you changed your enum to be:
public enum Colors
{
Blue,
Red,
Green
}
Anyone who stored these values in their DBs would see that things that were once Red, are now Blue, and what was Green is now Red.
Ideally, you should define your enum like so:
public enum Colors
{
Red = 0,
Green = 1
}
And then, when you add a new one, you should have:
public enum Colors
{
Red = 0,
Green = 1,
Blue = 2
}
This will help prevent any potential versioning issues.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With