Должен ли класс константных строк быть статическим?

Я работаю над новым проектом, и я заметил некоторый код, который я не уверен в этом. Имена и значения, которые я использую для демонстрации вопроса, являются поддельными.

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 действительно пригодится для чисто служебных классов.

Имейте в виду, что статический класс запечатан; он не может быть унаследован.