C#: разница между "const" и "static readonly"

суббота, 24 января 2009, Oleksandr Reminnyi

Один из вопросов, о которы не задумываешся, пока не спросят...

Так какая же разница между этими переменными? А вот какая.

На высоком уровне, значения констант, заменяються своими значениями во время компиляции, в то время как значение "static readonly" поля определяеться в момент выполнения кода.

Это означает, что любая библиотека / сборка, у которых есть ссылки на "const" необходимо перекомпилировать если изменять константу. Изменение же статических переменных не потребует в дальнейшем перекомпиляции.Безусловный выигрыш статик полей.

"Static readonly" поля могут содержать ссылочные типы, в то время как константы только поддерживают чисельные типы, строки .NET string и null.

Варианты инициализации(updated):

class Foo

    {

//инициализация при создании - норма.

// при чем не обязательно константой. Сейчас ложим результат вычислений

        public static readonly int fooVal = Foo.getIntVal();//ok

// иннициализация в статическом конструкторе - тоже норма. Все ок.
        static Foo()
        {
            fooVal = 12;//ok
        }

        public static int getIntVal()
        {
            return 12;
        }

// стандартный конструктор - здесь уже возникнет проблема компиляции.
        public Foo()
        {
            fooVal = 12;//fail           
        }
    }

Можно сделать вывод, что "const" поля довольно негибки и если нужны какие либо динамические изменения в такого рода полях лучше использовать "Static readonly".


Ищите нас в интернетах!

Комментарии

Свежие вакансии