Существует также третий способ объявления «констант»: открытое статическое свойство.
public static string ConstString {get{return "First test";}}
Это имеет семантику управления версиями поля только для чтения, но если джиттер встроен в геттер, он становится постоянной времени джита. И, в отличие от const
, его можно использовать для пользовательских типов.
Я думаю, что рекомендуется использовать статические свойства для типов значений и строк, но не для пользовательских классов, поскольку вы не хотите выделять новый экземпляр при каждом доступе к свойству.
Я использовал это в своем типе FixedPoint, как это:
public struct FixedPoint
{
private int raw;
private const fracDigits=16;
private FixedPoint(int raw)
{
this.raw=raw;
}
public static FixedPoint Zero{get{return new FixedPoint();}}
public static FixedPoint One{get{return new FixedPoint(1<<fracDigits);}}
public static FixedPoint MaxValue{get{return new FixedPoint(int.MaxValue);}}
}