I have an abstract class in an API that is used by methods in another assembly. The class has a nested enum defined inside it, a bit like this:
abstract public class Thing
{
public enum Status { Accepted, Denied, Pending };
abstract public Status status { get; private set; }
etc...
}
I then decided it would be a better design if Thing was an interface. But I can't do this:
public interface Thing
{
enum Status { Accepted, Denied, Pending };
Status status { get; }
etc...
}
This produces the error message "Interfaces cannot declare types." However, if I move the definition of the enum outside of the interface, firstly I'd be breaking encapsulation (the Status type really belongs to Thing and is meaningless on its own) and more importantly I would have to go and modify the code in the many other assemblies that use this. Can you think of any solutions?
Thing
as a class. There is nothing wrong with your abstract base class.