Разница между static readonly и const
В чем разница между static readonly(не просто readonly а static readonly) и const в C#
Источник: Stack Overflow на русском
В чем разница между static readonly(не просто readonly а static readonly) и const в C#
Вы можете использовать статический конструктор и в нем инициализировать static readonly. Это может быть удобно, когда нужно определить параметры системы после запуска. Const вы должны инициализировать сразу после объявления.
Const может быть только простым типом.
Примеры:
public class ReadOnly1
{
public static readonly string OsVersion;
public static readonly MyOSVersion MyOsVersion;
static ReadOnly1()
{
OsVersion = Environment.OSVersion.VersionString;
MyOsVersion = new MyOSVersion();
}
public static string GetVesion()
{
return OsVersion;
}
public static string GetMyVesion()
{
return MyOsVersion.ToString();
}
public class MyOSVersion
{
string OSV;
PlatformID ID;
public MyOSVersion()
{
OSV = Environment.OSVersion.VersionString;
ID = Environment.OSVersion.Platform;
}
public override string ToString()
{
return OSV + " " + ID.ToString();
}
}
}
Console.WriteLine(ReadOnly1.GetMyVesion());
Console.WriteLine(ReadOnly1.GetVesion());
// Все скомпилировалось и запустилось
// Вывод:
// Unix 13.4.1 Unix
// Unix 13.4.1
public class Const1
{
public const ConstClass const1 = new ConstClass();//Ошибка - это не скомпилируется
//с ошибкой
// выражение должно быть константным
public const double[] const2 = { 1, 2, 3 };//Ошибка - это не скомпилируется с ошибкой
// выражение должно быть константным
public const ConstStruct const3 = new ConstStruct();//Ошибка - это
//не скомпилируется с ошибками
// выражение должно быть константным, ConstStruct - не может быть объявлен как конст
public const int const4 = 10;// все хорошо
public const int const5;// ошибка - требуется указать значение поля const
static Const1()
{
}
public class ConstClass
{
}
public struct ConstStruct
{
}
}