Enum values cannot be altered. It is an error to try and assign a value to an enum. However, the value of an enum isn't really const or immutable. It's copied every time that the enum is used. This is fine in cases where the enum is a value type, but it's problematic when the enum is a reference type. I believe that the classic example is if you have an AA which is an enum. You copy _the entire_ AA every time it's referenced. But it's not just AA's. Normal arrays have the problem too.
Given that the value of enum must be known at compile time and given that it cannot be changed, why aren't enums all immutable? What's gained by making so that every reference to an enum is replaced by its value rather than actually referencing an immutable value? In most cases, it could still be replaced by the value (since it's a constant) if that's more efficient. And in the case of reference types, it would actually act like a reference type. So, I ask, should enums just all be made automatically immutable instead of having the current replace when referenced semantics? Is there a good reason _not_ to make all enums immutable? - Jonathan M Davis