Вам следует переосмыслить, если вы хотите решить эту проблему с помощью перечислений, потому что первая категория перечислений представляет для меня какую-то концепцию "видимости", тогда как вторая категория действительна только для экземпляров с видимостью "public".
Как насчет решения вашей проблемы примерно так:
public enum Visibility
{
Public,
Private
}
public abstract class VisibilityState
{
public Visibility Visibility { get; private set; }
protected VisibilityState(Visibility visibility)
{
Visibility = visibility;
}
}
public class PublicVisibilityState : VisibilityState
{
public PublicVisibilityState() : base(Visibility.Public) { }
}
public class PrivateVisibilityState : VisibilityState
{
public PrivateVisibilityState() : base(Visibility.Private) { }
public OtherEnum OtherEnumState { get; set; }
}
public enum OtherEnum
{
Abc, Mno, Pqr
}