9.6 常量性
有的语言,如非托管C++,允许将方法或参数声明为常量,从而禁止实例方法中的代码更改对象的任何字段,或者更改传给方法的任何对象。CLR没有提供这个功能。
非托管C++将实例方法或参数声明为const只能防止程序员用一般的代码来更改对象或参数。方法内部总是可以更改对象或实参的。
要么是通过强制类型转换来去掉常量性,要么通过获取对象/实参的地址,再向那个地址写入。
所有非托管C++像程序员撒了个黄,使他们以为常量对象或实参不能写入。
实现类型时,可以避免写操纵对象或实参的代码,
例如String类就没有提供任何能更改String对象的方法,所以字符串是不可变的。
CLR没有验证常量对象/实参未被改变的能力,所以CLR将不得不对每个写入操作进行验证,
确定该写入针对的不是常量对象,这对性能影响很大。因此CLR没有提供常量对象/实参的支持