Важно е да разберете концепциите за програмиране на C #, преди да продължите с прилагането на кода. Преди да преминем към разликите между const и readonly, нека първо да разберем ключовите думи и как те се използват в програмата. И двете са най-често срещаните ключови думи, използвани в програмирането на C # и основно за една и съща цел. И двете ключови думи обаче са много различни една от друга. Const е запазена дума, използвана за представяне на постоянни стойности и тя уточнява, че стойността не може да бъде променена след време на компилиране, докато readonly е модификатор, който може да се използва в полета, чиято стойност може да бъде променена по време на изпълнение. Нека да разгледаме някои от основните разлики между const и readonly.
Const се отнася до постоянна променлива и стойността на която трябва да бъде зададена само веднъж, по време на деклариране. Когато ключовата дума const се използва по време на декларация, тя става константа, което означава, че стойността остава постоянна и не може да бъде променена в цялата програма. Това е по-скоро запазена дума, която уточнява, че стойността не трябва да се променя след компилиране. Const е по подразбиране статично статичен, така че може да бъде извикан с името на класа с помощта на „Classname.VariableName“. Постоянните стойности също се наричат буквални. Тя може да бъде от всеки основен тип данни, като цяло число const, плаващ const или строчен буквал.
Ключовата дума Readonly е модификатор, който може да се използва само в полета, но не и в локални променливи. Полето за четене може да се инициализира или в момента на деклариране, или вътре в конструктор в същия клас, така че стойностите могат да бъдат различни за различните изпълнения на програмата в зависимост от използвания конструктор. Ключовата дума readonly указва, че променлива на инстанция на обект не може да се променя и всеки опит за промяна след деклариране води до грешка при компилация. Променливата не може да бъде модифицирана чак след изпълнението. Променливите се правят само за четене, за да спрат да извикват кода от случайно да го променят, след като е конструиран.
Ключовата дума Constant (const) не е нищо друго освен неизменни променливи, чиято стойност може да се инициализира само в момента на компилиране. Тези постоянни стойности също се наричат буквални. Той просто ни позволява да определим дали дадена променлива може да се променя или не. Казано по-просто, константи са имплицитно статични и те трябва да бъдат инициализирани преди да бъдат използвани в програмата. Ключовата дума Readonly, от друга страна, е модификатор, който може да се използва в полета, чиято стойност може да бъде променена по време на изпълнение. Той предотвратява промяната на полетата и стойностите на които могат да бъдат зададени чрез референтни променливи.
Const е статично по подразбиране и стойностите, за които трябва да бъдат зададени по време на деклариране на променлива, което означава, че стойностите се задават само по време на компилиране. Константа се декларира с помощта на ключовата дума „const“. Инициализацията на постоянно поле трябва да бъде постоянен израз и може да не се променя. Просто казано, const е константа на време за компилиране. Полето само за четене, от друга страна, може да се инициализира само на ниво клас, а не вътре в метода и полето не може да бъде променено след инициализация. С други думи, променливите само за четене могат да се инициализират в момента на деклариране или вътре в конструктор.
Стойност на const се въвежда директно в кода, тъй като действа като подмяна на времето за компилиране. Компилаторът поставя постоянната стойност в метаданните за сглобяване, която дефинира константата и вгражда стойността в самия IL код след инициализация, така че не се изисква памет за константи по време на изпълнение за разпределение. Стойността само за четене не е постоянна и се съхранява в грамадата на товарача, паметта, за която не може да бъде разпределена, докато не се зареди нейният тип. Полетата за четене само се съхраняват в динамичната памет, така че стойностите могат да бъдат получени само по време на изпълнение.
Въпреки че и двете ключови думи се използват почти с една и съща цел, те имат различна семантика на двоично версия. Когато изразът се позовава на константа, компилаторът вгражда стойността по време на компилиране. Така че, ако стойността се използва в различен монтаж, първоначалната сборка трябва да бъде актуализирана и стойността трябва да бъде променена. Промените в монтажа не се отразяват, докато не се прекомпилира. Стойността не се получава до време на изпълнение, когато израз се позовава на поле за четене. Ако стойността се промени в различен монтаж, промените се отразяват в сглобката веднага щом се зареди, без да е необходимо да я прекомпилирате.
И двете ключови думи се използват за едно и също нещо, което е да се декларира член, така че стойностите да не могат да се променят в цялата програма. Ключовата дума const обаче е много различна от ключовата дума за четене. Const е постоянна променлива, стойността на която трябва да бъде инициализирана по време на компилиране, докато полето за четене само може да се инициализира само на ниво клас, в момента на деклариране или вътре в конструктора. Const е константа на време за компилиране, докато полетата за четене са само за четене. Променливите на Constance могат да бъдат достъпни с помощта на „Classname.VariableName“, докато променливите само за четене могат да бъдат достъпни чрез „InstanceName.VariableName“. Освен това, const променливите могат да бъдат декларирани в методи, докато четените полета не могат да бъдат декларирани в методи.