constant needs to be initialized when it is declared.
read only variable can be assigned dynamically but need to be done before constructor exists as the the value is not changeable later.
Choosing between read only or constant depends on our requirement. When we are confident that our constant value does not change we can use “const”. The issue with constant is when we define a constant “a” variable with value 20 in an assembly X and use this assembly in another assembly Y, any update of variable “a” is not reflected until we recompile it.
But when we use a read only value here it is a reference to memory location and when we have new “a” value and on building assembly “X” all the assemblies using this X assembly the value of “a” is updated without being building them again.