不,它们不是相同的东西。一个“const”字段是内嵌于程序集中的字面值,只有基本类型(字符串和数字)可以是“const”,并且在编译时计算。当您引用一个“const”字段时,编译器会将该字段的字面值内嵌。因此,如果从另一个程序集使用一个“const”,并且另一个程序集的值发生了改变,只有在您针对新版本重新编译后,您的程序集才会使用新值。而“readonly”字段是一个普通字段,在构造函数之外不能更改。
任何类型的成员都可以是“readonly”。这意味着该成员在包含类构造后不能被重新分配;即它不能用“=”运算符设置为一个新对象。可变类(如集合)仍然可以相对于它们的成员进行修改;只是,如果您有一个作为集合的“readonly”成员,那么在构造之后它不能被分配给一个全新的集合。“const”与字面量(例如“5”)并没有太大不同:它表示一个不变的值,因此只在指定一个值(而不是一个对象)的情况下才真正有意义。