States and Inheritance


States are very powerful, but their behavior can be a little confusing when combined with inheritance. This article discusses how states and inheritance work together and things you should be aware of in your project when using States with Screens/Entities that inherit from other Screens/Entities.

States are enums

For starters we should lay the programming foundation that States are enums. In other words, when you create a new State, you add a new entry to an enum in your code. For example, if you have created an Entity with the following four States:

  • Disabled

  • Enabled

  • Highlighted

  • Invisible

The generated code will create this enum:

public enum VariableState
    Uninitialized, // This exists so that the first set call actually does something

State values cannot be added in derived objects

The fact that States use enums is very important to the discussion of inheritance. Enums do not have a sense of inheritance - you can not inherit one enum from another (this is a C# language rule). Therefore, if you define a set of variables in the base class - that's it! You can't add or remove from them in a derived object.

Accessing state in derived custom code

Of course, the CurrentState property is public:

public VariableState CurrentState
        return mCurrentState;
        mCurrentState = value;

This means that the derived object can set its CurrentState just the same way the base class:

this.CurrentState = VariableState.Invisible;

Last updated