Должен ли класс константных строк быть статическим?
Я работаю над новым проектом, и я заметил некоторый код, который я не уверен в этом. Имена и значения, которые я использую для демонстрации вопроса, являются поддельными.
public class MyConsts //Should it be static?
{
public const string MyConst1 = "a";
public const string MyConst2 = "b";
public const string MyConst3 = "c";
public const string MyConst4 = "d";
....
}
Для моей логики этот класс (который содержит только значения consts) должен быть статическим, поэтому нет возможности инициализировать его, что не имеет смысла, я прав?
РЕДАКТИРОВАТЬ: Я писал код слепых, поэтому я смутил порядок строк и const, и потому что это не было целью моего вопроса, я исправил это.
Ответы
Ответ 1
Да, для него имеет смысл быть статичным. Это означает ваше намерение, не позволяет клиентам даже объявлять переменную этого типа и т.д.
Вам нужно будет переместить модификатор const
до части типа:
public const string MyConst1 = "a";
...
Если значения могут когда-либо измениться, рассмотрите использование полей public static readonly
вместо const
, хотя - в противном случае значение будет испечено в любой код, который ссылается на константы, что означает, что вам нужно перестроить любой клиентский код, если значения изменение.
(Другой вариант - сделать константы internal
вместо public
.)
Ответ 2
Да, класс должен быть static
. Но связаны ли эти значения на самом деле const
?
Все объявленные const
будут скомпилированы в любые реферирующие сборки, поэтому, если это библиотека классов, скажем, и вы выпускаете новую версию с изменениями этих значений const, они не будут собраны сборками которые ссылаются на них.
В этом конкретном случае public static readonly string
имеет смысл.
Однако, если они видны только в одной конкретной сборке (например, приложение консоли или приложение WinForms), вы должны объявить, что класс internal
и const
являются точными как-есть.
Ответ 3
Да, он должен быть статическим, если значения никогда не меняются. Как вы говорите, нет смысла разрешать клиентский код создавать его.
Ответ 4
Если он содержит только const
и не будет содержать ничего, тогда вам было бы лучше сделать его статическим классом, чтобы предотвратить создание экземпляра и как таковое засорение.
Ответ 5
Действительно, это зависит от вас. Static действительно пригодится для чисто служебных классов.
Имейте в виду, что статический класс запечатан; он не может быть унаследован.