Разница между static readonly и const

Рейтинг: 0Ответов: 1Опубликовано: 19.07.2023

В чем разница между static readonly(не просто readonly а static readonly) и const в C#

Ответы

▲ 0

Вы можете использовать статический конструктор и в нем инициализировать 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
        {

        }
    }