Вы можете посмотреть на разницу с помощью простого примера:
void Main()
{
var f = F.Foo;
var b = F.Bar;
}
public class F
{
public const string Foo = "F";
public static readonly string Bar = "B";
}
даст следующий IL:
IL_0001: ldstr "F"
IL_0006: stloc.0 // f
IL_0007: ldsfld UserQuery+F.Bar
IL_000C: stloc.1 // b
IL_000D: ret
Значение Foo
const
является «запеченные» во время компиляции на месте вызова , поэтому вы видите ldstr
самого значения «F», а поле static
испускает ldsfld
, который загружает это поле во время выполнения, а затем назначает его локальной переменной b
.
Создание поля static
и const
является ошибкой времени компиляции. Оба типа const
и static
определены для типа, а не для экземпляра. Более того, поле static
может быть установлено во время выполнения, а const
должно быть известно во время компиляции.
Если вы хотите установить кучу постоянных значений, которые не будут меняться во время выполнения, то с const
должно быть хорошо. Но вы должны помнить, что если вы измените значение const
, недостаточно скомпилировать источник, содержащий consts, вам придется перекомпилировать всех, кто потребляет этот const
.
'const' * подразумевает *' static', но этот язык не позволит вам использовать оба ключевых слова одновременно. –
Возможно, самая большая разница заключается в том, что 'const' будет компилироваться, а' static const' - нет. Вы имели в виду 'static readonly'? – dasblinkenlight
Что вы подразумеваете под «централизовать всю строку»? – ilans