Advanced Customization > Services and Infrastructure Customization > Enumerated Types > Extending an Enumerated Type
  
Extending an Enumerated Type
An enumerated type can be extended, and using it in a constraining, or covariant, manner is supported. For example, MySize can be extended by MyDerivedSize, and it can be used as indicated by MyDerivedItem, as shown in the following figure.
The one caveat with using extended EnumeratedType instances is that, if concrete types are used in the model, they are the only types that can be read back from the database. Using the example in the preceding figure, this means that other subclasses of MySize can be assigned to the size attribute of MyItem, and they can be stored in the database, but they can be read out only as instances of the types that are modeled.
This limitation would not apply if MySize were an abstract class. When an abstract class is modeled, the runtime type information is stored in the database along with the instance information. Therefore, the exact type and instance can be reconstructed when reading it back from the database.