  *         super(name);
  *     }
  *
+ *     public static function valueOf (name :String) :Foo
+ *     {
+ *         return Enum.valueOf(Foo, name);
+ *     }
+ *
  *     public static function values () :Array
  *     {
  *         return Enum.values(Foo);

 *  - declare your enum constants const, and with the same String as their name.
 *  - call finishedEnumerating() at the end of your constants.
 *  - your enum objects should be immutable
 *  - implement a static values() method for extra points, as above.
 */
public class Enum
    implements Hashable, Comparable

    protected var _name :String;

    /** An array of enums for each enum class. */
    private static const _enums :Dictionary = new Dictionary(true); 

    /** Is further instantiation of enum constants for a class allowed? */
    private static const _blocked :Dictionary = new Dictionary(true);

    finishedEnumerating(Enum); // do not allow any enums in this base class
}
