Подтвердить что ты не робот

Строка public const?

Можно ли использовать такой класс (конкретный дизайн/ориентир)? Я использую шаблон MVVM.

public static class Pages
{
    public const string Home = "Home.xaml";
    public const string View2 = "View2.xaml";
    /* a few more... */
}
4b9b3361

Ответ 1

Существуют значительные различия между const и public static readonly, и вы должны подумать над тем, что использовать с осторожностью:

(Под "клиентом" здесь я имею в виду "код в другой сборке, относящийся к элементу".

  • Если вы измените значение, но не перекомпилируете клиентов, они будут использовать исходное значение, если вы используете const. С помощью public static readonly они будут видеть обновленное значение. Если вы все равно перекомпилируете всех клиентов, это не проблема.
  • Только форма const - это константа времени компиляции, что означает, что она может использоваться в:
    • Аргументы атрибута
    • Операторы switch
    • Дополнительные объявления параметров

Если вы с удовольствием перекомпилируете всех своих клиентов, если вы когда-либо измените значение, преимущества второй точки маркера указывают на использование const.

Конечно, мне интересно, действительно ли Pages должен быть общедоступным... это похоже на то, что может быть internal, с членами internal - в этот момент нижние стороны const полностью уходят.

Ответ 2

Общее руководство при использовании const для определения постоянных значений. Должны ли быть доступны эти константы вне сборки? Если нет, объявите его как

internal static class Pages
{
    public const string Home = "Home.xaml";
    public const string View2 = "View2.xaml";
    /* a few more... */
}

Ответ 3

С точки зрения дизайна вашего вопроса кажется, что он может быстро запутаться, используя один статический объект, чтобы содержать все ссылки на страницы. Можете ли вы не просто сохранить его в фактическом объекте страницы?

class view2 {
    public const string PageName = "View2.xaml";

    ... other stuff ...
}

затем вызовите его по строкам...

goTo(view2.PageName);

Ответ 4

Я думаю, что это одна из лучших вещей, которые вы можете сделать. Еще несколько предложений: со строками прекрасно использовать const s. Если вы хотите использовать разные типы, используйте static readonly, а затем инициализируйте конструктор static.

Для другого подхода с использованием перечислений см. этот поток. Поскольку то, что вы пытаетесь сделать, похоже на переименование строки, это может быть для вас.

И не забывайте, что до тех пор, пока вы укажете свои страницы в коде, внесение изменений (например, переименование или перемещение страницы) будет больно. Подумайте о том, чтобы использовать что-то вроде ресурсов или файлов Sitemap. (Если вы используете только класс для списка страниц, , я бы использовал с сильными ресурсами С# ), они будут вести себя так же, как ваш класс, и вы не придется их кодировать вручную.)