Общото между двете е, че с веднъж зададена стойност, тя повече не може да се промени по време на изпълнението. Има няколко разлики.
-Константите са винаги статични и са общи за целия клас, докато readonly могат да са различни за всяка инстанция, но могат и да са статични.
- Стойността на константата се записва в кода и по време на компилацията навсякъде, където е използвана тази константа, тя се замества със съответната стойност. Readonly от друга страна може да получи стойността си докато програмата върви (например когато не знаеш каква точно ще е стойността и очакваш да я получиш в последствие).
- Стойността на readonly може да се запише в кода и в последствие да се промени само в конструктура на този клас.
Относно това къде могат да се използват. Представи си, че правиш игра. Докато успееш да нагласиш точната скорост, с която да се движат обектите(да не е твърде бързо или много бавно) ще трябва да опитваш много. Ако използваш директно числа, дали ще е приятно при всяка промяна да обикаляш на 10 места из кода и всяко едно число да го променяш?А ако са 100 места? Твърде е възможно да пропуснеш някое място и всичко да се обърка. Тук на помощ идва константата. Вместо числа, използваш нея и когато се наложи промяна ти променяш само на 1 място, другото го върши компилатора.