1、static 表示被修饰的对象的生命周期与当前的应用程序域相同,因此可以在多个实例中共享;
2、const:声明常量的一种方式,必须是在声明时就要初始化值,一旦设定就不能修改,是编译时常量。就时说你引用const字段,在编译时就可以替换成相应的常量值。如果要把只读字段设置为静态,就必须显示声明他;
3、readonly:声明常量的另一种方式在声明时可以初始化,同时在构造函数中也可以初始化。但是一旦构造函数运行完毕,其就不能再修改了,具有更大的灵活性,其值是在运行时确定的;
所以相比const来讲,readonly具有更大的灵活性,更多的情况下可以选择readonly来使用;
4、#define name value 是宏定义,是文本级的替换,没有类型安全(const和readonly都是类型安全的),在c#中可以用const来替换。