Ничего из вышеперечисленного.
Очевидный вопрос: почему вы хотите определить только тип страницы?Сама идентификация не полезна.Скорее всего, вы захотите сделать что-то еще со страницей.
Я бы создал интерфейсы для всех типов страниц, например IAccountingPage
, а затем создал бы какое-то хранилище.Если вам необходимо предварительно обработать страницу до ее отображения, создайте интерфейс фильтра, например IPagePreFilter<T> where T : IPage
, а затем внедрите его следующим образом:
public class DiscountFilter : IPagePreFilter<ISalesPage>
{
public void Process(ISalesPage page)
{
if (page.Product.Id == 1234)
page.AddParagraph("Product is at amazing 50% off");
}
}
Резюме: не пытайтесь идентифицировать страницы, чтобы иметь логику, подобную if (page.PageType == PageEnum.Accounting) bla bla
потому что это нарушает принцип замещения Лискова.Сделайте более надежное решение, подобное предложенному мной.