Constant
 
 Constant means as you know in mathematics “which can’t be changed after  declaration". You can declare a value type as well as reference type data type [only  which can assign null] as Constant. It can be an object of reference type or  field or local variable but value never change if you define once. By default  constant are static, so you cannot define a constant type as static.
 
- public const int firstnumber = 10;  
 
It is a compile-time constant. A field or local variable which is declared as  constant can be initialized with a constant expression which must be fully  evaluated at compile time. 
- const int x = 10;  
 - const int y = 20;  
 - const int z = x + y;  
 - Console.WriteLine("The value of x :" + x);  
 - Console.WriteLine("The value of y :" + y);  
 - Console.WriteLine("The value of z :" + z);   
 -   
 - int a = 15;  
 - const int b = x + a;  
 - Console.WriteLine("The value of b :" + b);  
 -   
 
You can mark Constants as public, private, protected, internal, or protected  internal access modifiers.  
When to use
  If you think that the value of field or local variable is never changed.  
ReadOnly  It is same as Constant but it is run time constant. I mean to say that a ReadOnly  field or local variable can be initialized either at the time of declaration or  inside the constructor of same class. That is why we called it run time constant. 
- public class MyClassProgram  
 - {  
 -    readonly int x = 10;  
 -    public MyClassProgram()  
 -    {  
 -   
 -       x = 20;  
 -    }  
 - }  
 
As you know that we cannot declare Constant as static but we can do it for  readonly explicitly. By default it is not static. It can be applied to value  type and reference type [which initialized by using the new keyword)] both and  also with delegate and event   
When to use
  If you think, you need to change the value of variable or field at run time  inside the calling constructor, then you need to use the readonly modifier.  
Static  Static keyword is a special keyword. It can be used with class member, methods,  fields, properties, events, constructors as well as with class. It is used  to specify a static member which is common for the entire object.  
- public static class ReadOnly  
 - {  
 -    static int number = 10;  
 -    public static void disp()  
 -    {  
 -       Console.WriteLine(number);  
 -    }  
 - }  
 
 Key Points about all these three: 
  	- Constant is compile time constant and it is by default static.
  	- ReadOnly is run time constant and you can define it static explicitly.
  	- Static does not work with indexers and if you create a class as static  	as you need to create all class members as static. 
  
 So, finally you learn what is Constant, ReadOnly and Static keyword in C#.