Well yeah, that’s the point. They are 2 different concepts with different limitations. Both of your examples can be explained with one simple fact. Each value of a enum is of the same type, therefor they all have the same methods and properties. Also you can not declare a value of type X.A
as that would be the same as saying I want this argument to have the type 5
. For what you are describing you want to use sealed classes as you pointed out.