const
подразумевает static
(вам не нужен экземпляр для ссылки на значение const
).
Я хочу также добавить этот важный момент: когда вы ссылаетесь на (ссылку) на сборку с public const
, это значение копируется в вашу сборку. Поэтому, если значение const
в ссылочной сборке изменяется, ваша сборка будет по-прежнему иметь исходное скомпилированное значение.
Если это поведение не приемлемо, тогда вы должны рассмотреть создавая поле a public static readonly
.
Lib.dll, представленный как двоичный:
public class Foo {
public const int HATS = 42;
public static readonly int GLOVES = 33;
}
App.exe, ссылки Lib .dll:
Foo.HATS // This will always be 42 even if the value in Lib.dll changes,
// unless App.exe is recompiled.
Foo.GLOVES // This will always be the same as Foo.GLOVES in Lib.dll
Из MSDN :
Не создавайте константу для представления информации, которая вы ожидаете изменения в любое время. Например, не используйте постоянное поле для хранения цены на услугу, номер версии продукта или фирменное наименование компании. Эти значения могут меняться со временем, а поскольку компиляторы распространяют константы, другой код, скомпилированный с вашими библиотеками, должен быть перекомпилирован для просмотра изменений.
blockquote>Из DotNetPerls :
DLL. Когда вы используете поле или объявление
const
, компилятор C # фактически вводит значение переменнойconst
непосредственно в код IL. Следовательно, он по существу стираетconst
как отдельный объект.Внимание: если программы, зависящие от
blockquote>const
, не перекомпилируются после изменения значенияconst
, они могут сломаться [ потому что они будут продолжать использовать предыдущее значение ].