But that is not the answer that you would expect from a technical person, the difference you read above is just a symptom. The real technical difference between constant and read only is that, the compiler replaces any reference to the constant by its actual value.
For example suppose I have a class Test that references another class Class1. If I am reading a contant value from class Class1 in class Test, then in the assembly of class Test, that reference will be replaced by its actual value.
This is the code for Class 1
This is the code for Test
Class 1 and Test are in seprate projects.
If you compile the solution, equivalent of this is what actually goes into the assembly for ConsoleApplication3.
As you can seeClass1.c is replaced by new Decimal(25) Which means if you ever change the value of c in Class1, Class Test will still hold its previous value unless class Test is itself recompiled.
So never use constant for a value that will ever change in the future.