Строка public const?
Можно ли использовать такой класс (конкретный дизайн/ориентир)? Я использую шаблон MVVM.
public static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
Ответы
Ответ 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.
(Если вы используете только класс для списка страниц, , я бы использовал с сильными ресурсами С# ), они будут вести себя так же, как ваш класс, и вы не придется их кодировать вручную.)