2015-05-30 6 views
1

Я пытаюсь собрать все объявления строк в моем приложении в одном классе, так что они легко изменяются по всему проекту. Я могу создать Strings класс следующим образом:Статический класс со статическими свойствами

public static class Strings 
{ 
    public static readonly string Title = "App Title"; 
} 

или вот так:

public static class Strings 
{ 
    public const string Title = "App Title"; 
} 

Класс должен быть статическим и постоянным все свойства. Какая разница в том, имеют ли свойства Stringsstatic readonly или ключевые слова const?

+1

'const' * подразумевает *' static', но этот язык не позволит вам использовать оба ключевых слова одновременно. –

+1

Возможно, самая большая разница заключается в том, что 'const' будет компилироваться, а' static const' - нет. Вы имели в виду 'static readonly'? – dasblinkenlight

+0

Что вы подразумеваете под «централизовать всю строку»? – ilans

ответ

2

Вы можете посмотреть на разницу с помощью простого примера:

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 

Значение Fooconst является «запеченные» во время компиляции на месте вызова , поэтому вы видите ldstr самого значения «F», а поле static испускает ldsfld, который загружает это поле во время выполнения, а затем назначает его локальной переменной b.

Создание поля static и const является ошибкой времени компиляции. Оба типа const и static определены для типа, а не для экземпляра. Более того, поле static может быть установлено во время выполнения, а const должно быть известно во время компиляции.

Если вы хотите установить кучу постоянных значений, которые не будут меняться во время выполнения, то с const должно быть хорошо. Но вы должны помнить, что если вы измените значение const, недостаточно скомпилировать источник, содержащий consts, вам придется перекомпилировать всех, кто потребляет этот const.

Смежные вопросы